2016-09-13 18 views
0

となるはずですが、私はSwiftの経験がないため問題があります。カスタムセルでUISwitchを使用してオブジェクトのプロパティを設定する

私はViewControllerの中にTableViewがあり、オブジェクトの配列(allListItemsと呼ばれます)から取り込まれたカスタムセルがあります。これらのオブジェクトは、を使用して作成されました。これは、Core Dataの代わりに使用しています。各カスタムセルにはUISwitchがあり、理想的には、ユーザーがUISwitchを切り替えると、ブールisSelectedのプロパティがindexPath.rowに変更され、そのオブジェクトが別の配列selectedListItemsに追加されるように設定したいと考えています。 。

私がSO、Tuts +、AppCodaで検索したすべてのことは、ここでプロトコルデリゲートパターンを使用する必要があることがわかりました。カスタムセルクラスのプロトコルと私のViewControllerクラスの代理人です。私は大部分の日のためにそれを逃げ出した後、私は配列がRealm Model Objectsであると思われる運がなかった。

私が言及したように、私はSwiftとプログラミング一般に一般的なので、ELI5の応答は非常に高く評価されています!前もって感謝します!

代わりに提案されたプロトコル/デリゲートパターンの
import UIKit 

class AllListItemsTableViewCell: UITableViewCell { 

    @IBOutlet var toggleIsSelected: UISwitch! 
    @IBOutlet var listItemLabel: UILabel! 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     // Initialization code 
    } 

    override func setSelected(selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 

     // Configure the view for the selected state 
    } 
} 

答えて

0

がコールバックを使用します。

は参考のために、ここで私のカスタムセルです。
これはSwiftで非常に簡単です。テーブルビューセルにおいて

は閉鎖

var callback : ((UITableViewCell, Bool) -> Void)? 

とオプションの変数を宣言し、cellForRowAtIndexPathのスイッチ

@IBAction func switchChanged(sender : UISwitch) { 
    callback?(self, sender.on) 
} 

ためIBActionでそれを呼び出すコールバックを設定

cell.callback = { (tableViewCell, switchState) in 
    if let indexPath = self.tableView.indexPathForCell(tableViewCell) { 
    // do something with index path and switch state 
    } 
} 

セルを戻すことは、セルが移動された場合に役立ちますしばらくして、最新のインデックスパスを取得します。

+0

これはまさに私が必要としていたものです。ありがとうございます!今私は 'selectedListItems'配列から' indexOf'を使用しているので項目を削除するのに少し苦労していますが、それは私自身では分からない場合は別の問題です。 – MachTurtle

関連する問題