UINavigationBar和UITableView之间的工具栏?

我有一个UITableViewControllerembedded在UINavigationController。 这个tableView是NSFetchedResultsController的一个实例。 我需要在NavigationController的顶部栏和TableViewController之间添加一个工具栏,但我不知道如何去做(我甚至不知道是否有可能)。 我想做一些像苹果公司的WWDC应用程序(除了他们没有embedded在NavigationController中的TableViewController)。 我需要在栏上有一些控件来驱动NSFetchedResultsController。

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

任何想法如何做到这一点? 我需要以编程的方式吗? 如果是这样,怎么样?

顺便说一句,我的目标是与故事板和ARC iOS6 +。

苹果的WWDC应用程序

我喜欢的方法是在外层使用UIViewController ,包含工具栏和容纳表的容器视图。 然后在一个单独的UITableViewControllerbuild立你的表格,并用embed segue把它连接到容器视图中。 总的来说,我认为这使得代码更加模块化,更容易遵循,因为高层结构是在故事板中进行布置的。

使用embeddedsegue的步骤如下所示:

  1. 控制 – 从容器视图拖动到您要embedded的视图控制器,并select“embedded”选项。
  2. 在属性检查器中给embeddedsegue一个标识符。
  3. 在父级的prepareForSegue方法中configuration表视图控制器,检查你的segue的标识符。

在我的VCollectionViewGridLayout库中有一个这样的例子。 看看Sort&Filter示例项目。

技术说明TN2154:UIScrollView和Autolayout提供了另一种解决scheme:

请注意,您可以通过在视图和滚动视图的子树之外的视图(如滚动视图的超级视图)之间创build约束来使滚动视图的子视图浮动(不滚动)其他滚动内容。

也就是说,即使滚动视图(例如表格视图)修改子视图的框架,自动布局引擎也会在下一个布局过程中重置它。

你需要使用UIViewController,然后在故事板中添加NSFetchedResultsController类的工具栏和tableView实例

你可以制作任何UIView的topBar,然后作为tableHeaderView传递它。 它可以帮助你。

使用UIViewController而不仅仅是UITableViewController ,你可以很容易地将其他控件放在UITableView

希望这可以帮助。

您可以使用UITableViewController(保持UIRefreshControl支持和键盘避免等细节)。 你只需要在一个普通的视图中embedded你的工具栏,并将其放置在你的tableHeaderView中。 然后实现这个滚动视图的委托方法来locking。

 #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; } 

请注意,如果您也使用节头,则必须将这些视图发送到您的tableHeaderView之后,否则它们将浮在tableHeaderView之上。