Swift: TableView 控制器和段值改变

Swift: TableView controller and segment value change

我有点卡住了,希望你能帮我解决这个问题...

在我的应用程序中,我有一个带有几个自定义原型单元格的简单 TableView 控制器。

在一个自定义原型单元格中,我有一个具有两个值的段控件(在我的例子中是温度标度 F/C)。

一切都显示正常,我可以更改值(使用值更改操作)但是当我想 'send' 那个选择到另一个 ViewController (通过 segue)从TableView 控制器(例如返回到之前显示的控制器,此值将用于在标签内以正确的比例显示温度)。

如果我在原型自定义单元格 (userSelection) 中有一个变量,则无法在表视图中访问该变量 class。

如果我将 'value change' 操作移动到 tableview 控制器,我似乎 'lose' 能够跟踪更改的内容。

我遗漏了 'glues' 这些加在一起的东西...

非常感谢!

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBOutlet weak var label1: UILabel!
    @IBOutlet weak var button1: UIButton!
    @IBAction func pressButton1(sender: AnyObject) {
    }
}


class TableViewController: UITableViewController {
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        // #warning Potentially incomplete method implementation.
        // Return the number of sections.
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete method implementation.
        // Return the number of rows in the section.
        return 1
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        //let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as! UITableViewCell
        var cell = tableView.dequeueReusableCellWithIdentifier("customcell") as! TableViewCell
        return cell
    }

    class TableViewCell: UITableViewCell {

    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
    }

    @IBOutlet weak var segment1: UISegmentedControl!

    @IBAction func segmentValueChanged(sender: AnyObject) {
        var userSelection = segment1.selectedSegmentIndex
    }
}

如果您一次只需要通知另一个实例,您可以使用委托模式:

定义委托协议:

protocol TableViewCellSegmentDelegate {
   func segmentValueChanged(sender: UISegmentedControl)
}

在您的 table 视图单元格中,定义一个委托变量,您可以在值更改时通知它:

class TableViewCell: UITableViewCell {
    var delegate: TableViewCellSegmentDelegate?

    @IBAction func segmentValueChanged(sender: UISegmentedControl) {
        if let delegate = delegate {
            delegate.segmentValueChanged(sender)
        }
    }
}

在您的 table 视图中,在 tableView(_:cellForRowAtIndexPath:):

let cell = tableView.dequeueReusableCellWithIdentifier("customcell") as! TableViewCell
cell.delegate = self
return cell

在 table 视图中实施协议:

extension TableViewController: TableViewCellSegmentDelegate {
    func segmentValueChanged(sender: UISegmentedControl) {
        // do something with `sender.state`
    }
}

如果您想通知多个实例,您可以在值更改时触发 NSNotification