如何在prepareForSegue之前调用didSelectRowAtIndexPath?

9
我正在制作一个基于TableView的iOS应用程序。 这是我想做的事情: TableView1 -> TableView2 一旦我选择了其中一个单元格,就会显示新的TableView2。 在新的TableView出现之前,我想要突出显示该单元格。 然而,由于加载新的TableView数据,高亮显示非常缓慢。 我查阅了相关资料。原因是prepareForSeguedidSelectRowAtIndexPath之前被调用。 那么,你能告诉我如何在prepareForSegue之前调用didSelectRowAtIndexPath吗? 或者告诉我如何在选中单元格时设置表格单元格。 祝一切顺利。
4个回答

20

你正在混合两种不同的方法来执行它。

1-第一种选择-仅使用storyboards和prepareForSegue:

将原型单元格连接到故事板中的第二个视图控制器(连接必须从单元格开始,以第二个视图控制器结束)。 在这种情况下,你必须只使用prepareForSegue方法而不是didSelectRowAtIndexPath方法。第二个VC会在prepareForSegue之后自动推出。

2-第二种选择-使用didSelectRowAtIndexPath:

仅当你将segue从第一个视图控制器(而不是从单元格)连接到第二个视图控制器时才使用didSelectRowAtIndexPath。 在didSelectRowAtIndexPath方法的末尾,你必须调用performSegue。


谢谢!它能用了,但又出现了另一个问题。我会发布新的帖子关于此问题。 - Noriaki Takamizawa
16
如果您使用第一种替代方案并需要根据单元格在表格中的位置采取某些行动,请使用以下代码获取正确的indexPath:NSIndexPath *indexPath = self.tableView.indexPathForSelectedRow; - mpemburn

2
你需要的是以下函数。它将在preparedForSegue之前被调用。首先,你需要在你的类中定义一个变量,然后在这个函数中设置它,比如下面的代码:
var selectedIndexPath: NSIndexPath = NSIndexPath()

override func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {
        selectedIndexPath = indexPath
        return indexPath
    }

最后,您可以在`preparedForSegue`函数中使用此值。

@AadilAli 没问题 :) - Hamid

1
  1. 为控制器创建segue->控制器
  2. 在didselectrowatindexpath中运行数据加载
  3. 当它完成时->执行你的segue

执行segue是更好的答案。但是另一个问题出现了。 不管怎样,还是谢谢! - Noriaki Takamizawa

0

以下是设置视图控制器的方法:

  1. 当包含表格视图1的视图控制器加载时,加载表格视图1的数据。
  2. 在调用tableView:didSelectRowAtIndexPath:时,使用performSegue:触发segue。
  3. 当包含表格视图2的视图控制器加载时,加载表格视图2的数据。

听起来你可能会过早地加载表格视图2的数据,这就是为什么你会看到延迟。因为你正在使用数据加载占用主线程,UI无法更新并显示蓝色高亮。

如果你在viewDidLoad方法中加载数据,就可以避免用户选择表格视图单元格时进行昂贵的加载。你应该只在tableView:didSelectRowAtIndexPath:方法中告诉你的视图控制器执行segue到详细视图控制器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接