将 UINavigationController 弹出到 UITableView 并显示不同的选定行

Posted

技术标签:

【中文标题】将 UINavigationController 弹出到 UITableView 并显示不同的选定行【英文标题】:Popping UINavigationController to a UITableView and displaying a different selected row 【发布时间】:2011-09-08 06:25:29 【问题描述】:

我正在创建一个应用程序,其中UITableView 是它所在的UINavigationController 堆栈上的第一项。在UITableView 上进行选择会将视图推送到“DetailedViewController”。在DetailedViewController 中,您可以浏览填充表格视图的项目。

当弹出DetailedViewController 并返回UITableView 时,如何取消选择通过DetailedViewController 导航到的相应项目并将其显示在UITableView 的中心?

每个人都可以看到的示例是邮件应用程序。当您在收件箱中进行选择时,您按下“DetailedViewController”。在那里,您可以浏览UITableView 中填充的项目。当您弹出DetailedViewController 时,它会取消选择您最后在DetailedViewController 中查看的相应项目。

【问题讨论】:

【参考方案1】:

要取消选中的行,写下面的代码viewDidAppear:方法。

// Index path for selected row
NSIndexPath *selectedRow = [_tableView indexPathForSelectedRow];

// Deselet the row with animation
[_tableView deselectRowAtIndexPath:selectedRow animated:YES];

// Scroll the selected row to the center
[_tableView scrollToRowAtIndexPath:selectedRow 
       atScrollPosition:UITableViewScrollPositionMiddle 
               animated:YES];

【讨论】:

如何从您推送的DetailedViewController 中传递选定的行。我不能使用委托,因为我的 TableView 使用了来自DetailedViewController 的委托 好的,我让它工作了。当视图将消失时,我使用委托方法将行从详细视图传回。然后我将scrolltorow放在viewwillappear中,然后在viewdidappear出现时取消选择。【参考方案2】:

根据您希望动画的外观,您可以简单地取消选择当前选择的行。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
     [tableView deselectRowAtIndexPath:indexPath animated:YES];
     ...

【讨论】:

这不是我真正想要的,但我确实必须将它与其他代码结合使用。

以上是关于将 UINavigationController 弹出到 UITableView 并显示不同的选定行的主要内容,如果未能解决你的问题,请参考以下文章

将 UIViewController 放在 UINavigationController 堆栈之上

将 UIViewController 添加到 UINavigationController 的问题

如何将 UIView 添加到 UINavigationController 堆栈

将 UINavigationBar 添加到没有 UINavigationController 的 UITableViewController

为啥我们将 UIViewController 传递给 UINavigationController 类?

如何将 CAGradientLayer 应用于 UINavigationController 背景