我想将select row
作为indexPath
传递给另一个控制器。因为我写了以下代码:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell
let indexPath = tableView.indexPathForSelectedRow();
return cell
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var secondController: SecondViewController = segue.destinationViewController as SecondViewController
secondController.rowIndex.text = indexPath
}
但我的indexPath是零。为什么呢?
答案 0 :(得分:2)
在cellForRowAtIndexPath中,这是错误的:
let indexPath = tableView.indexPathForSelectedRow();
对于每一行,您将所选行保存在一个变量中,该变量将在cellForRowAtIndexPath完成后销毁,因为它不会被任何对象保留。
你只需要在prepareForSegue
中使用它var secondController: SecondViewController = segue.destinationViewController as SecondViewController
if let selectedIndexPath = tableView.indexPathForSelectedRow();
secondController.rowIndex= selectedIndexPath.row
Haven未经过测试,但认为这样可行。希望它有所帮助。
答案 1 :(得分:0)
为了满足您的要求,请执行以下操作。
步骤1:声明全局变量(该范围在类中)。
喜欢var selectedIndexForRow:Int? = nil
var selectedIndexForSection:Int? = nil
第2步:覆盖didSelectRowAtIndexPath
。
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
selectedIndexForRow = indexPath.row;
selectedIndexForSection = indexPath.section;
}
第3步:将selectedIndexForRow
和selectedIndexForSection
变量传递给另一个控制器
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var secondController: SecondViewController = segue.destinationViewController as SecondViewController
secondController.row= selectedIndexForRow
secondController.section= selectedIndexForSection
}
答案 2 :(得分:0)
sender
中的prepareForSegue
是您选择的UITableViewCell
。
只需将其转换为UITableViewCell
,然后在indexPathForCell
上致电tableView
。这将返回所选单元格的indexPath
。无需其他变量,全局或其他变量。
抱歉,我无法发布任何Swift代码。我精通Obj-c,但我还不认识Swift。
Obj-C的示例代码如下。我希望你自己写一下Swift的等价物,或者这里有人会编辑它。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
UITableViewCell* cell = (UITableViewCell*)sender;
NSIndexPath* indexPath = [self.tableView indexPathForCell:cell];
//Use indexPath as you intend to
}