我需要一个事件,根据我点击的TableViewCell更改变量。但与连接到按钮的操作不同,表格视图单元格根本没有动作指示器。所以我的问题是:
我想创建一个包含数组项的TableView。根据我点击的项目,我想更改我的变量,以便下一个ViewController的结果取决于您点击的按钮。
因此,为了简化操作,以下是我希望应用看起来像的示例:
在第一个TableViewController上,我有一个基于数组的列表,在第二个ViewController上,我有一个标签,根据变量显示文本。
我有一个nameArray = ["Mum", "Brother", "Me"]
和一个weightArray = [140, 160, 120]
以及一个变量weight = 0
。第二个ViewController上的标签告诉var权重。所以当你点击TableView中的“妈妈”时,我希望下一个ViewController说140,当我点击“兄弟”然后160等等......
直到这里一切正常,除了根据我点击的内容更改var之外,我没有任何问题。
长篇故事,短篇小说:
我想要一个TableViewCell的Action,它可以改变连接到Button的Action中的var,但是Cell根本没有Action插座。
答案 0 :(得分:1)
使用此方法。使用indexPath.row查找您选择的行号
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var cell : UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)!
switch cell.labelSubView.text as! String {
case "Mum":
self.weight = weightArray[0]
case "Brother"
self.weight = weightArray[1]
and so on..
..
default:
statements
}
}
注意更好的选择
我还考虑过nameArray中的条目太多而switch语句可能不太好的情况。在这种情况下,您可以通过cell.labelSubView.text as! String
接下来,您可以检查nameArray是否包含单元格文本,并获取与单元格文本匹配的名称的索引。接下来,您可以在weightArray
中的相同索引处获得所需的权重。然后做self.weight = weightArray[requiredIndex]
希望这有帮助。
更新:我的有经验的朋友@Duncan在下面提到过,在这种情况下,switch语句是一种糟糕的编码习惯。我不会删除它,因为这对我和我的编程相对较新的程序员来说都是一个教训。所以我把它放在一个黄色的方框中,说它不是一个好的代码
更好的选择是:
答案 1 :(得分:-1)
你需要维护字典数组,那些字典有像“人”和“权重”这样的键,然后你可以通过使用表视图委托方法UITableViewDelegate的tableView:didSelectRowAtIndexPath:
答案 2 :(得分:-1)
在所选单元格的视图控制器中创建一个实例变量(类定义后顶层的var)。
class MyTableViewController: UIViewController
var selectedRow: Int
override func tableView(tableView: UITableView,
didSelectRowAtIndexPath indexPath: NSIndexPath)
{
selectedRow = indexPath.row
//invoke a segue if desired
performSegueWithIdentifier("someSegue");
}
override func prepareForSegue(segue: UIStoryboardSegue,
sender: AnyObject?)
{
if segue.identifier == "someSegue"
{
//Cast the destination view controller to the appropriate class
let destVC = DestVCClass(segue.destinationViewController)
destVC.selectedRow = selectedRow
}
}
正如Andey在他的回答中所说,创建单个数据对象数组(字典,结构或自定义数据对象)可能更好。然后,当用户点击单元格时,您可以将整个数据对象传递到目标视图控制器,而不是将所选行的索引传递给下一个视图控制器。然后目标视图控制器可以提取它所需的任何数据。 (重量,在你的例子中。)