Swift:TableView 控制器和段值更改
Posted
技术标签:
【中文标题】Swift:TableView 控制器和段值更改【英文标题】:Swift: TableView controller and segment value change 【发布时间】:2015-05-07 11:56:36 【问题描述】:希望你能帮我解决这个问题,因为我有点卡住了......
在我的应用中,我有一个简单的 TableView 控制器,其中包含几个自定义原型单元格。
在其中一个自定义原型单元中,我有一个带有两个值的段控件(在我的例子中是温标 F/C)。
一切都显示正常,我可以更改值(使用值更改操作)但是当我想从 TableView 控制器(例如返回到之前显示的控制器,该值将用于在标签内以正确的比例显示温度)。
如果我在原型自定义单元格 (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】:如果您一次只需要通知一个其他实例,您可以使用委托模式:
定义一个委托协议:
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
。
【讨论】:
以上是关于Swift:TableView 控制器和段值更改的主要内容,如果未能解决你的问题,请参考以下文章
Swift 3 和 Firebase - Tableview 未更新
Swift - TableView的协议代理无法正常工作 - 以模态呈现