2016-09-13 56 views
0

我試圖做一些應該很簡單,但由於我對Swift沒有經驗,我遇到了問題。在自定義單元格中使用UISwitch設置對象屬性

我有一個ViewController它有一個TableView裏面的自定義單元格從一個對象數組(填入allListItems)填充。這些對象是用我使用的Realm Model Object創建的,而不是核心數據,我認爲這可能是相關的。每個自定義單元格中都有一個UISwitch,理想情況下,我想設置它以便當用戶切換UISwitch時,它會修改indexPath.row的布爾型isSelected屬性,然後將該對象附加到單獨的數組,名爲selectedListItems

我所有通過SO,Tuts +和AppCoda搜索都發現,我應該在這裏使用協議 - 委託模式,在我的自定義單元類中使用我的協議,並在我的ViewController類中使用我的代理。在一天的大部分時間裏,我一直沒有幸運,但是,我認爲這可能是由於陣列是Realm模型對象。

正如我所提到的,我對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)? 

並調用它在IBAction用於開關

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

cellForRowAtIndexPath設置回調

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

如果單元格移動了我,將單元格傳回可能很有用一段時間才能獲得最新的索引路徑。

+0

這正是我所需要的,非常感謝!現在,我正在努力刪除'selectedListItems'數組中的項目,因爲我正在使用'indexOf',但如果我無法自己弄清楚這是另一個SO問題。 – MachTurtle

相關問題