UITableView - 我怎样才能直接从一个项目的视图移动到另一个?
Posted
技术标签:
【中文标题】UITableView - 我怎样才能直接从一个项目的视图移动到另一个?【英文标题】:UITableView - how can I move straight from one item's view to another? 【发布时间】:2011-05-19 09:34:39 【问题描述】:我的应用程序的一部分是笔记部分,有点像 iPhone 的内置笔记应用程序。用户在 UITableView(由 NSFetchedResultsController 控制)中点击他们的笔记,UINavigationController 会显示该笔记。
目前,如果用户想要查看另一个笔记,他们必须返回 UITableView 并在那里选择它。我希望有向上和向下箭头直接进入下一个/上一个音符。
解决这个问题的最佳方法是什么?我猜我需要返回并以某种方式从 NSFetchedResultsController 获取下一项而不显示 UITableView?以及如何将它与 UINavigationController 集成?
【问题讨论】:
为什么不将笔记的 NSManagedObject objectID 转发到笔记控制器并在那里执行获取请求以确定下一个/上一个笔记?您提出的方法似乎有点乏味。 @Schoob 我将如何处理 UINavigationController?我仍然需要我的后退按钮才能转到 tableView。 【参考方案1】:我想出了一个相当混乱的解决方案。它只是工作,但我相信一定有更优雅和简单的东西。无论如何,这就是我目前的工作。
首先,UITableView 是笔记的 UIViewController 的委托。笔记的 UIViewController 有一个名为“editingIndexPath”的属性,它是该笔记在 UITableView 中的 indexPath。当用户按下“上一条笔记”按钮时,会调用以下方法:
- (void)backAction:(id)sender
NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:editingIndexPath.row-1 inSection:editingIndexPath.section];
[self.delegate editingViewControllerDidRequestObjectAtIndexPath:newIndexPath];
然后是tableViewController中的委托方法:
- (void)editingViewControllerDidRequestObjectAtIndexPath:(NSIndexPath *)indexPath
[self.navigationController popViewControllerAnimated:NO];
NoteEditViewController *detailViewController = [[NoteEditViewController alloc] init];
[self.navigationController pushViewController:detailViewController animated:animated];
Note *aNote = [self.fetchedResultsController objectAtIndexPath:indexPath];
detailViewController.noteTextView.text = aNote.text;
detailViewController.editingIndexPath = indexPath;
detailViewController.delegate = self;
[detailViewController release];
这可行,但它相当不雅,并且总是会导致“弹出”动画(从右到左),无论是转到下一个音符还是上一个音符。我也用一些核心动画捏造了这一点,但我确信我错过了一种更简单、更好的方法。
【讨论】:
【参考方案2】:事实证明,答案非常简单——我根本不需要改变观点。我刚刚使用委托从根视图控制器获取了新信息,并更改了当前视图控制器上的所有属性。其中一个属性是 NSIndexPath,因此它知道它出现在根视图的表中的什么位置。
【讨论】:
以上是关于UITableView - 我怎样才能直接从一个项目的视图移动到另一个?的主要内容,如果未能解决你的问题,请参考以下文章
IOS UiTableView Cells我怎样才能让它的高度可调