

２日前にも質問しましたが、連続で躓いてしまいすいません。。

**やりたいこと＆状況**  
こういった構成で、 ２，４で取得したデータをデータベースに保存する。  
TableViewCellクラスは複数のセルをまとめて扱うクラスとして定義してある。

１のセル テキストラベルのみ  
２のセル UIPickerView  
３のセル テキストラベルのみ  
４のセル UITextFieldと 編集終了ボタン  
５のセル Realmデータベースに保存する

[![画像の説明をここに入力](https://i.stack.imgur.com/OM3H2.png)](https://i.stack.imgur.com/OM3H2.png)

**問題点**  
複数のセルから取得したデータを保存するように考えて設計していましたが、  
セル２，セル４で取得したデータを処理しようと考えておりましたが、  
このクラスで var categorySelected = "" , var textFieldInputed =
""で挿入されたデータを扱うことは出来ませんでした。  
これはおそらく、TableViewのfunc cellForRowAtIndexPath
でインスタンス化されたCustomTableViewCellのオブジェクトが個別に生成されているからだろうと思いました（おそらく）。

このように複数のカスタムされたセルから値を取得し、データベースに保存する（この場合RealmSwift）場合には、  
どのように設計すべきだったのでしょうか。  
もちろん、TableViewを使わずに同じことをするというのが現在やりたいことの解なのでしょうが、  
TableViewCellを複数用いながらという前提なら、そのセルごとに保存させるか、モーダル表示させるなりして処理することが定石なのでしょうか？  
それともこの状態からうまく処理する方法があるのでしょうか？

**TableView**

[code]

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
        var cell:UITableViewCell = UITableViewCell()
    
        switch indexPath.row{
        case 0:
            cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
        case 1:
            cell = tableView.dequeueReusableCellWithIdentifier("myPick", forIndexPath: indexPath) as! CustomAddTraining
        case 2:
            cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
        case 3:
            cell = tableView.dequeueReusableCellWithIdentifier("textField", forIndexPath: indexPath) as! CustomAddTraining
        case 4:
            cell = tableView.dequeueReusableCellWithIdentifier("done", forIndexPath: indexPath) as! CustomAddTraining
        default:
            break
    
        }
    
        switch indexPath.row{
        case 0:
            cell.textLabel?.text = "Choose Category"
        case 1:
            break
        case 2:
            cell.textLabel?.text = "Name Training"
        case 3:
            break
        case 4:
            break
        default:
            break
        }
        return cell
    
    }
    func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {
        return nil
    }
    
[/code]

**CustomTableViewCell**

[code]

    import UIKit
    class CustomAddTraining: UITableViewCell, UITextFieldDelegate, UIPickerViewDataSource, UIPickerViewDelegate {
    
    let categoryList = ["Front", "Back", "Abnominal", "Leg", "Hip"]
    var categorySelected = ""
    var textFieldInputed = ""
    var test = "test"
    
    @IBOutlet weak var done: UIButton?
    @IBOutlet weak var decideButton: UIButton?
    @IBOutlet weak var myTextField: UITextField?
    
    @IBOutlet weak var myPicker: UIPickerView?
    
    
    override func awakeFromNib() {
        super.awakeFromNib()
        myTextField?.delegate = self
        myTextField?.borderStyle = .RoundedRect
        myPicker?.delegate = self
        myPicker?.dataSource = self
        decideButton?.hidden = true
    }
    
    
    
    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
    
        // Configure the view for the selected state
    
    }
    
    func textFieldDidBeginEditing(textField: UITextField) {
        decideButton!.hidden = false
    }
    
    func textFieldDidEndEditing(textField: UITextField) {
        textFieldInputed = (textField.text)!
        print(textFieldInputed)
        print(categorySelected)
    }
    
    
    @IBAction func decideAction(sender: AnyObject) {
        textFieldShouldReturn(myTextField!)
    }
    
    func textFieldShouldEndEditing(textField: UITextField) -> Bool {
        decideButton!.hidden = true
        return true
    }
    func textFieldShouldReturn(textField: UITextField) -> Bool {
        myTextField!.resignFirstResponder()
        return true
    }
    
    
    
    //pickerに表示する列数を返すデータ・ソースメソッド
    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int{
        return 1
    }
    
    //行数を返す
    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
        return categoryList.count
    
    }
    //表示するデータを返す
    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return categoryList[row]
    }
    //セルを選択したときの処理 Realmに保存
    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    
        categorySelected = categoryList[row]
        print(categorySelected)
        print(textFieldInputed)
    }
    
    
    
    @IBAction func saveRealmAction(sender: AnyObject) {
        print(textFieldInputed)
        print(categorySelected)
    }
    }
    
[/code]


CC BY-SA 3.0
2015-12-27T07:46:17.657
20409
2015-12-27T07:46:17.657
5828
question
ios swift
複数のUITableViewCellから値を取得しデータベースへ保存する際に問題が発生