从表视图控制器进行多个转场

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

有没有关于如何切换视图的建议?
1个回答

17
你的问题中信息不够充分,但据我所知,这听起来像是手动和自动过渡之间的问题以及每个选项的限制。
通过从(原型)表格单元或其他控件拖动创建一个自动过渡。它的好处在于它是自动的-点击控件执行过渡,在代码中只需要实现 prepareForSegue:sender: 以便目标视图控制器获取正确的数据。缺点是任何给定的控件(包括原型表格单元)只能有一个传出过渡(否则,故事板将不知道要自动执行哪个)。
通过从源视图控制器拖动,可以在IB中创建手动过渡。这样做的好处是视图控制器可以有多个传出过渡。另一方面,它们不与可点击的控件相关联,因此您必须实现逻辑以确定应该何时执行哪个过渡,并调用performSegueWithIdentifier:让其发生。
鉴于这些权衡,你有两种可能的解决方案:
1.使用多个原型表格单元--然后每个都可以有自己的自动传出过渡。您需要更改您的表格视图控制器的 tableView:cellForRowAtIndexPath: 来检查索引路径的部分编号,并选择适当的标识符用于dequeueReusableCellWithIdentifier:,但如果您的趋势和故事单元格有不同的内容,则这可能会使事情变得更方便或更高效。
2.使用手动过渡。然后您可以实现 tableView:didSelectRowAtIndexPath: 来调用performSegueWithIdentifier:,并根据索引路径的部分选择适当的标识符。
无论哪种方式,你的 prepareForSegue:sender: 实现看起来都很好。

好的,谢谢!我会进一步研究这两个选项,看看是否可以继续前进。关于解决方案1,您如何实现多个原型表格单元?在Storyboard界面中,您是否只需将另一个表视图控制器拖到根控制器上即可? - swallace
在IB中选择表视图,属性检查器将具有原型单元格数量的控件。或者从库中拖动UITableViewCell到表中。无论哪种方式,都要确保选择每个单元格并为其指定唯一标识符。 - rickster
非常好的解释。帮助我更好地理解正在发生的事情。 - Andrew

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