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
。
我有点卡住了,希望你能帮我解决这个问题...
在我的应用程序中,我有一个带有几个自定义原型单元格的简单 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
。