UINavigationBar和UITableView之间的ToolBar?

时间:2013-07-24 04:29:28

标签: iphone ios objective-c uitableview

我在UINavigationController上嵌入了一个UITableViewController。此tableView是NSFetchedResultsController的一个实例。 我需要在NavigationController的顶栏和TableViewController之间添加一个工具栏,但我无法弄清楚如何做(我甚至不知道它是否可行)。 我想做像Apple一样的WWDC App(除了他们没有嵌入在NavigationController中的TableViewController)。 我需要在栏上有一些控件来驱动NSFetchedResultsController。

有些人建议使用类似问题的人使用UITableView而不是TVC,但我确实需要将TVC作为NSFetchedResultsController的实例。

关于如何实现这一目标的任何想法? 我是否必须以编程方式执行此操作?如果是这样,怎么样?

顺便说一下,我的目标是使用故事板和ARC来实现iOS6 +。

Apple's WWDC App

6 个答案:

答案 0 :(得分:6)

我更喜欢的方法是在外层使用UIViewController,包含工具栏和容纳表格的容器视图。然后在单独的UITableViewController中构建表,并使用embed segue将其连接到容器视图中。总的来说,我认为这使代码更加模块化,更容易理解,因为故事板中有高级结构。

使用嵌入segue的步骤如下:

  1. 控制 - 从容器视图拖动到要嵌入的视图控制器,然后选择"嵌入"选项。
  2. 在属性检查器中为embed segue指定一个标识符。
  3. 使用父{q} prepareForSegue方法配置表视图控制器,检查您的segue标识符。
  4. 我的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上。