我在UINavigationController上嵌入了一个UITableViewController。此tableView是NSFetchedResultsController的一个实例。 我需要在NavigationController的顶栏和TableViewController之间添加一个工具栏,但我无法弄清楚如何做(我甚至不知道它是否可行)。 我想做像Apple一样的WWDC App(除了他们没有嵌入在NavigationController中的TableViewController)。 我需要在栏上有一些控件来驱动NSFetchedResultsController。
有些人建议使用类似问题的人使用UITableView而不是TVC,但我确实需要将TVC作为NSFetchedResultsController的实例。
关于如何实现这一目标的任何想法? 我是否必须以编程方式执行此操作?如果是这样,怎么样?
顺便说一下,我的目标是使用故事板和ARC来实现iOS6 +。
答案 0 :(得分:6)
我更喜欢的方法是在外层使用UIViewController
,包含工具栏和容纳表格的容器视图。然后在单独的UITableViewController
中构建表,并使用embed segue将其连接到容器视图中。总的来说,我认为这使代码更加模块化,更容易理解,因为故事板中有高级结构。
使用嵌入segue的步骤如下:
prepareForSegue
方法配置表视图控制器,检查您的segue标识符。我的VCollectionViewGridLayout库中有一个例子。看看Sort& amp;过滤示例项目。
答案 1 :(得分:2)
Technical Note TN2154: UIScrollView And Autolayout提供了另一种解决方案:
请注意,您可以通过在视图和滚动视图的子树外部的视图(例如滚动视图的超级视图)之间创建约束,使滚动视图的子视图显示为浮动(不滚动)在其他滚动内容上。
也就是说,即使滚动视图(例如表格视图)修改了子视图的框架,自动布局引擎也会在下一个布局过程中重置它。
答案 2 :(得分:1)
你需要使用UIViewController,然后在storyboard中添加工具栏和NSFetchedResultsController类的tableView实例
答案 3 :(得分:0)
您可以创建任何UIView的topBar,然后将其作为tableHeaderView传递。 它可能对你有帮助。
答案 4 :(得分:0)
使用UIViewController
代替UITableViewController
,您可以轻松地将其他控件与UITableView
区分开来。
希望这有帮助。
答案 5 :(得分:0)
您可以使用UITableViewController(保留诸如UIRefreshControl支持和键盘避免等细节)。您只需将工具栏嵌入到普通视图中并将其放在tableHeaderView中。然后实现此滚动视图委托方法以锁定。
#pragma mark - UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGRect rect = self.toolbarContainerView.frame;
rect.origin.y = MIN(0,scrollView.contentOffset.y + scrollView.contentInset.top);
self.toolbarContainerView.frame = rect;
}
请注意,如果您还使用了section header,则必须在tableHeaderView后面发送这些视图,否则它们将浮动在tableHeaderView上。