2016-09-26 6 views
0

私は現在、SelectedListItemsViewControllerと呼ばれるTableViewの内部にViewControllerを持っています。このViewControllerTableViewには、SelectedListItemsTableViewCellというカスタムセルクラスが設定されています。UIStepperを使用してレルムモデルオブジェクトのプロパティを変更するにはどうすればよいですか?

私はselectedListItemsと呼ばれるレルムモデルオブジェクトの配列を持っており、それぞれにはいくつかのプロパティがあります。 SelectedListItemsTableViewCellはのオブジェクトをのオブジェクトのlistItemに設定し、各行にはUIStepperがあり、隣にはUILabelがあります(現在のところ)UIStepper.valueが各行に表示されます。理想的には、ラベルは各行のlistItemWeightプロパティを反映し、その行を増分または減分するときに変更します。

これは私のカスタムセルである:完全listItemプロパティをロード

// Configure the cell... 
    cell.selectedListItemLabel.text = selectedListItems[indexPath.row].listItem 

    cell.listItemWeightLabel.text = "\(selectedListItems[indexPath.row].listItemWeight)" 

、および:

class SelectedListItemsTableViewCell: UITableViewCell { 

    @IBOutlet var selectedListItemLabel: UILabel! 
    @IBOutlet weak var listItemWeightLabel: UILabel! 
    @IBOutlet weak var stepperControl: UIStepper! 

    @IBAction func stepperValueChanged(sender: UIStepper) { 

     listItemWeightLabel.text = Int(sender.value).description 

    } 
} 

そして、私のViewControllerの中cellForRowAtIndexPath、私はそうのようにセルを構成しましたlistItemWeightのプロパティが正しく表示されますが、UIStepperのインクリメントまたはデクリメントがうまくいくと、それはうんざりします。

UILabelとUIStepperを[indexPath.row].listItemWeightに正しくリンクするにはどうすればよいですか?

答えて

0

上記の答えは私の問題の実際の解決に私をリードするのに役立ちましたが、将来的には、誰もが好奇心旺盛であれば - 私は閉鎖を使用して終了しました。私のカスタムセルクラスで

は、私が

@IBAction func stepperValueChanged(sender: UIStepper) { 

    selectedListItemLabel.text = Int(sender.value).description 
    tapped?(self) 

} 

を行なったし、私のビューコントローラでは、私は私が各セルのUIStepperビューコントローラファイル内にアクセスすることを許可され

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! SelectedListItemsTableViewCell 

    cell.stepperControl.value = selectedListItems[indexPath.row].listItemWeight 

    // Configure the cell... 

    cell.tapped = { (selectedCell) -> Void in 

     selectedListItems[indexPath.row].listItemWeight = cell.stepperControl.value 

    } 

をしました。

フラッシュアドバンテージのオプション2の回答をthis threadで読むのに役立ちました。

0

ステッパーの更新時に呼び出されるのと同じ方法で、listItemを更新してください。ただし、このアイテムはRealmデータベースに格納されているため、Realmデータベースのインスタンスを取得し、その変更をデータベースに書き込む必要があります。

これは、TableItemCellをlistItemのインスタンスに保持させることで可能です。新しいTableViewCellクラスは、このようになります。

class SelectedListItemsTableViewCell: UITableViewCell { 

    @IBOutlet var selectedListItemLabel: UILabel! 
    @IBOutlet weak var listItemWeightLabel: UILabel! 
    @IBOutlet weak var stepperControl: UIStepper! 

    var listItem: Item? 

    @IBAction func stepperValueChanged(sender: UIStepper) { 
     listItemWeightLabel.text = Int(sender.value).description 
     if let listItem = listItem { 
      let realm = try! Realm 
      try! realm.write { 
       listItem.listItemWeight = Int(sender.value) ?? 0 
      } 
     } 
    } 
} 
+0

入力いただきありがとうございました。私はUIStepperが更新するメソッド(stpperValueChanged)からlistItemを更新することができません。私が知っている限りは(プログラミングには新しくなってからはあまり言いませんが)、アクセスするにはindexPath.rowが必要です私はカスタムセルクラスで持っていないその特定のオブジェクトのプロパティ。私はその正面で間違っていますか? selectedListItemsのプロパティにドリルダウンしようとするたびに、 'SelectedListItemsTableViewCell'に(その配列からの)listItemへの参照がある場合、「Value of type '[RealmListItem]'にはメンバー 'listItemWeight'」がありません" – MachTurtle

+0

それを更新できるはずです。 –

+0

これはひどく素朴な質問ですが、その行のプロパティでオブジェクトを更新できるように、私の配列(グローバル)を 'SelectedListItemsTableViewCell'から参照する方法はありますか?私は過去20分間は検索してきましたが、Googleはここでの意味とは異なる方法で「参照」を解釈しています。 – MachTurtle

関連する問題