我有一个小型应用程序,它对初始表格视图使用多个部分布局。一个部分显示 Twitter 的最新趋势,另一部分显示 Twitter 的最新故事。当我单击趋势列表中的某个项目时,我会转换到一个新的表视图控制器,该控制器显示有关该趋势的最新推文。在故事部分的根控制器中,我希望能够在包含图像、链接等的不同视图控制器中显示更多信息。问题是,当我选择故事部分中的任何内容时,我将被推送到为趋势部分设置的表视图控制器。我已经命名了每个 Segue,并为我想要转换到的两个视图提供了自定义类,我这样做是为了检查正在调用哪个 Segue:
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([[segue identifier] isEqualToString:@"viewTrendsSearch"]) {
//get the controller that we are going to segue to
SearchTrendResultsViewController *strvc = [segue destinationViewController];
//get the path of the row that we want from the table view
NSIndexPath *path = [self.tableView indexPathForSelectedRow];
//here we get the trend object from the array we set up earlier to hold all trends
Trends *results = [currentTrends objectAtIndex:[path row]];
//pass the object that was selected in the table view to the destination view
[strvc setQuery: results];
}
if([[segue identifier] isEqualToString:@"storyfullDetails"]) {
StoriesViewController *svc = [segue destinationViewController];
NSIndexPath *path = [self.tableView indexPathForSelectedRow];
Stories *results = [currentStories objectAtIndex:[path row]];
[svc setStory:results];
}
}
关于如何获得不同观点有什么建议吗?
您的问题中没有足够的信息可以确定,但这听起来像是我所说的自动与手动转场以及每个转场的限制的问题。
An 自动的segue 是通过从(原型)表格单元格或其他控件拖动来在 IB 中创建的。它的好处在于,它是自动的——点击控件即可执行转场,而您在代码中所需要做的就是实现prepareForSegue:sender:
以便目标视图控制器获得正确的数据。缺点是任何给定的控件(包括原型表格单元格)只能有一个传出的转场(否则,故事板不知道要自动执行哪一个)。
A manualsegue是通过从源中拖动在IB中创建的视图控制器。这样做的好处是视图控制器可以有多个传出序列。另一方面,它们不与可点击控件关联,因此您必须实现逻辑来确定何时执行哪些操作(并调用performSegueWithIdentifier:
来实现它)。
考虑到这些权衡,您的问题有两种可能的解决方案:
使用多个原型表格单元格——然后每个单元格都可以有自己的传出自动转场。您需要更改表视图控制器的tableView:cellForRowAtIndexPath:
检查索引路径的节号并选择适当的标识符dequeueReusableCellWithIdentifier:
,但是如果您的趋势和故事单元格具有不同的内容,这可能会让事情变得更方便或更高效。
使用手动序列。然后你的表视图控制器可以实现tableView:didSelectRowAtIndexPath:
打电话performSegueWithIdentifier:
根据索引路径的部分选择适当的标识符。
无论哪种方式,你的prepareForSegue:sender:
实施看起来不错。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)