我希望你能帮我解决这个问题,因为我有点卡住了......
在我的应用程序中,我有一个简单的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
}
}
答案 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
。