如何在执行 segue 之前获取 UITableView 中最后选定的行
how to get the last selected row in a UITableView before a segue is executed
我在 UITableView 中插入了一个新行,现在我点击另一个单元格(也通过调试器中的断点突出显示,之后,只选择了点击的行):
新行 (UITextField) 的文本为 "new",所选单元格的标题为 "Hobby"
点击现在选择的 row/cell "Hobby" 我必须触发一个 segue 到另一个 TableViewController (ColumnViewController)
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if self.currentEdit != nil {
self.currentEdit.resignFirstResponder()
}
if segue.identifier == "SetupColumn" {
let cell = sender as! EditCell
let destControlller = segue.destinationViewController as! ColumnViewController
destControlller.kategorieID = cell.nameField.tag
}
}
但我必须知道,row/cell "Hobby" 已被点击,因为我必须在调用 segue 之前弹出警报。我只需要知道,该行与添加的行不同,而不是哪行被点击了。
self.currentEdit 包含实际选择的 TextField,但我只有添加的行。 :-(
更新
我得到了beyowulf的答案,你可以在下面看到。我以为,问题解决了,但是玩了一段时间,我突然(!?)得到错误
app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver () has no segue with identifier 'SetupColumn''
贝奥武夫的回答是:
Don't connect your segue to the your table view cells. Connect it to your view controller then call it explicitly when you want to segue
我现在的问题是:如何将我的 segue 连接到我的 视图控制器 而不是 将它连接到 table 视图单元?
tableView.indexPathForSelectedRow
能满足您的需求吗?
要从您的视图控制器添加一个 segue,请右键单击它并选择 "Triggered Segues",从 'manual' 行拖动到 segue 的目的地。
帮助和我一样愚蠢的人;-)
解决方案在 beyowulf 和 Meriw
的答案中找到
我必须从我的 SetUpViewController(源)和 ColumnViewController(目标)添加 Manual Segue,如屏幕截图所示
并将其命名为 SetupColumn
然后我只需要添加
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.performSegueWithIdentifier("SetupColumn", sender:tableView.cellForRowAtIndexPath(indexPath))
}
我在 UITableView 中插入了一个新行,现在我点击另一个单元格(也通过调试器中的断点突出显示,之后,只选择了点击的行):
新行 (UITextField) 的文本为 "new",所选单元格的标题为 "Hobby"
点击现在选择的 row/cell "Hobby" 我必须触发一个 segue 到另一个 TableViewController (ColumnViewController)
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if self.currentEdit != nil {
self.currentEdit.resignFirstResponder()
}
if segue.identifier == "SetupColumn" {
let cell = sender as! EditCell
let destControlller = segue.destinationViewController as! ColumnViewController
destControlller.kategorieID = cell.nameField.tag
}
}
但我必须知道,row/cell "Hobby" 已被点击,因为我必须在调用 segue 之前弹出警报。我只需要知道,该行与添加的行不同,而不是哪行被点击了。
self.currentEdit 包含实际选择的 TextField,但我只有添加的行。 :-(
更新
我得到了beyowulf的答案,你可以在下面看到。我以为,问题解决了,但是玩了一段时间,我突然(!?)得到错误
app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver () has no segue with identifier 'SetupColumn''
贝奥武夫的回答是:
Don't connect your segue to the your table view cells. Connect it to your view controller then call it explicitly when you want to segue
我现在的问题是:如何将我的 segue 连接到我的 视图控制器 而不是 将它连接到 table 视图单元?
tableView.indexPathForSelectedRow
能满足您的需求吗?
要从您的视图控制器添加一个 segue,请右键单击它并选择 "Triggered Segues",从 'manual' 行拖动到 segue 的目的地。
帮助和我一样愚蠢的人;-)
解决方案在 beyowulf 和 Meriw
的答案中找到我必须从我的 SetUpViewController(源)和 ColumnViewController(目标)添加 Manual Segue,如屏幕截图所示
并将其命名为 SetupColumn
然后我只需要添加
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.performSegueWithIdentifier("SetupColumn", sender:tableView.cellForRowAtIndexPath(indexPath))
}