【问题标题】:Multiple segues from table view controller来自表视图控制器的多个 segue
【发布时间】:2012-04-29 01:49:26
【问题描述】:

我有一个小型应用程序,它为初始表格视图使用多个部分布局。一个部分显示 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];
    }
}

关于如何获得不同观点的任何建议?

【问题讨论】:

    标签: objective-c ios storyboard ios5


    【解决方案1】:

    您的问题中没有足够的信息可以确定,但这听起来像是我所说的自动与手动 segues 以及对每个 segues 的限制的问题。

    自动转场是在 IB 中通过从(原型)表格单元格或其他控件拖动来创建的。它的好处是它是自动的——点击控件执行segue,您需要在代码中执行prepareForSegue:sender: 以便目标视图控制器获得正确的数据。缺点是任何给定的控件(包括原型表单元格)只能有一个传出的 segue(否则,故事板将不知道要自动执行哪个)。

    通过从源视图控制器拖动,在 IB 中创建了一个 手动 segue。这样做的好处是视图控制器可以有多个传出的segue。另一方面,它们与可点击控件无关,因此您必须实现确定何时执行的逻辑(并调用performSegueWithIdentifier: 来实现)。

    考虑到这些权衡,您的问题有两种可能的解决方案:

    1. 使用多个原型表单元格——然后每个单元格都可以有自己的传出自动转场。您需要更改表格视图控制器的tableView:cellForRowAtIndexPath: 以检查索引路径的部分编号并为dequeueReusableCellWithIdentifier: 选择适当的标识符,但如果您的趋势和故事单元格具有不同的内容,这可能会使事情变得更方便或高效。

    2. 使用手动转场。然后你的表视图控制器可以实现tableView:didSelectRowAtIndexPath: 调用performSegueWithIdentifier:,并根据索引路径的部分选择适当的标识符。

    无论哪种方式,您的 prepareForSegue:sender: 实现看起来都不错。

    【讨论】:

    • 好的,谢谢!我将进一步研究这两个选项,看看我是否可以继续前进。关于解决方案 1,您将如何实现多个原型表格单元格?在 storyboard 界面中,你会简单地将另一个 table view 控制器拖到根控制器上吗?
    • 在 IB 中选择表格视图,属性检查器将控制原型单元格的数量。或者将 UITableViewCell 从库中拖到表格中。无论哪种方式,请务必选择每个单元格并为其指定一个唯一标识符。
    • 很好的解释。帮助我更好地了解发生了什么
    猜你喜欢
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 2012-01-22
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多