Swift:TableView控制器和段值更改

时间:2015-05-07 11:56:37

标签: ios uitableview swift tableviewcell

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

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

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

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

如果我在原型自定义单元格(userSelection)中有变量,则在tableview类中无法访问它。

如果我将'价值变化'动作移动到tableview控制器,我似乎'失去'追踪变化的能力。

我错过了将这些“胶合”在一起的东西......

非常感谢!

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
    }
}

1 个答案:

答案 0 :(得分:2)

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

定义委托协议:

protocol TableViewCellSegmentDelegate {
   func segmentValueChanged(sender: UISegmentedControl)
}

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

class TableViewCell: UITableViewCell {
    var delegate: TableViewCellSegmentDelegate?

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

在表格视图中,tableView(_:cellForRowAtIndexPath:)

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

在表格视图中实施协议:

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

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