将 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