9

我正在制作基于 tableview 的 iOS 应用程序。这就是我想做的。Tableview1 -> Tableview2 一旦我选择了一个tableCell,就会显示新的tableView2。我想在显示新的 tableView 之前突出显示单元格。尽管如此,由于加载了新的 tableView 数据,hilight 非常慢。我查了一下这个。prepareForSegue之前调用is 的原因didSelectRowAtIndexPath

didSelectRowAtIndexPath那你能告诉我之前怎么打电话prepareForSegue吗?

或者告诉我选择单元格时如何设置表格单元格。

一切顺利。

4

4 回答 4

20

您正在使用两种不同的方式来实现它。

1 - 第一种选择 - 仅使用情节提要和 prepareForSegue:

将原型单元连接到情节提要中的第二个视图控制器(连接必须从单元开始并在第二个视图控制器上结束)。在这种情况下,您必须使用prepareForSegue 方法而不是 didSelectRowAtIndexPath。在 prepareForSegue 之后自动推送第二个 VC。

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

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

于 2012-11-05T16:00:36.773 回答
2

您需要的是以下功能。它将在preparedForSegue 之前调用。首先你需要在你的类中定义一个 var 然后在这个函数中设置它,如下所示:

var selectedIndexPath: NSIndexPath = NSIndexPath()

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

然后最后你可以在preparedForSegue函数中使用这个值

于 2016-02-26T15:25:13.163 回答
1
  1. 为控制器->控制器制作segue
  2. 在 didselectrowatindexpath 中运行数据加载
  3. 完成后 -> 执行你的 segue
于 2012-11-05T15:51:51.470 回答
0

以下是您应该如何设置视图控制器:

  1. 当包含 Table View 1 的视图控制器加载时,加载 Table View 1 的数据。
  2. IntableView:didSelectRowAtIndexPath:被调用,使用performSegue:.
  3. 当包含 Table View 2 的视图控制器加载时,加载 Table View 2 的数据。

听起来您可能会过早地加载 Table View 2 的数据——这就是您看到滞后的原因。因为您在加载数据时占用了主线程,所以 UI 无法更新并向您显示蓝色突出显示。

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

于 2012-11-05T15:54:35.017 回答