如何在Interface Builder中向UITableViewController添加导航栏?

时间:2011-02-21 16:44:43

标签: iphone ios interface-builder uitableview uinavigationbar

界面构建器不允许我单击并将导航栏拖动到表视图控制器上!这太令人沮丧了。

我想要的只是一个带有编辑按钮的表视图(在interface-builder中完成)。如果这不可能,那么如何以编程方式添加导航栏?

提前致谢。

8 个答案:

答案 0 :(得分:48)

在大纲视图中,确保选中表格视图控制器

然后转到编辑器菜单,然后单击嵌入子菜单,选择导航控制器,然后选择。您的导航控制器指向您的tableview控制器,内置关系。

答案 1 :(得分:17)

对于顶部带有编辑按钮的表格视图,使用UINavigationController,UITableView作为rootView。这意味着您将为表视图创建一个自定义UITableView子类,并将其用作UINavigationController实例的rootView。 (以编程方式,它是使用UINavigationController的-(id)initWithRootViewController设置的。它也可以通过IB设置。)

然后,在您的UITableView子类中,取消注释以下行:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

和voilà,您的UINavigationController视图显示为一个表格视图,导航栏右侧有一个编辑按钮。

由于控制器位于堆栈的顶部,左侧没有“后退”按钮,因此您可以将self.navigationItem.leftBarButtonItem用于您创建的任何UIBarButtonItem。

答案 2 :(得分:12)

我同意在Interface Builder中很难弄清楚如何做这样的事情,但幸运的是,可以通过这种方式将导航栏和条形按钮项添加到表格视图中。这是如何做到的:

  1. 将空白视图(UIView的实例)从库中拖动到表视图顶部附近的区域。当您在目标区域附近拖动时,Interface Builder将以蓝色突出显示它以显示放置视图的位置。放开,View将被添加为Table View标题视图的子视图。
  2. 从库中拖动导航栏并将其放在刚添加的空白视图上。
  3. 从库中拖动一个条形按钮项目并将其放到导航栏上。
  4. 修改

    上述方法的问题在于,正如Bogatyr指出的那样,导航栏将随表视图一起滚动。 Apple建议使用UIViewController的自定义子类,该子类拥有导航栏和调整大小UITableView的实例以适应。不幸的是,这意味着您必须自己实现UITableViewController子类所需的UIViewController行为。

    另一种似乎运行良好的方法是创建UIViewController的自定义子类,该子类拥有包含导航栏的空白背景视图以及空白内容视图(UIView的实例)适合导航栏。您的自定义子类将在同一个nib文件中指向UITableViewController的实例。

    这样做的好处是允许在Interface Builder中创建和配置所有视图组件,并且不需要从头开始实现UITableViewController方法。您需要在Table View Controller的父级中处理的唯一细节是将Table View添加为viewDidLoad中父级内容视图的子视图。

    父级可以实现导航栏按钮项的操作方法,并在必要时实现委托模式。

答案 3 :(得分:9)

从iOS6开始,您可以使用容器视图。因此,您需要做的是使用View控制器,向其添加导航栏,然后将Container View添加到同一个视图控制器。它会自动将新的视图控制器链接添加到容器视图中。现在只需删除故事板中的那个,以及您的表视图控制器。现在通过控制拖动将表视图控制器嵌入到容器视图中。希望它有所帮助。

答案 4 :(得分:4)

首先添加导航控制器并将表视图控制器(作为根视图控制器)放到导航控制器上。这是在Code中完成的,因为我没有使用IB。

答案 5 :(得分:3)

为什么世界上你不能将一个navigationItem拖到一个.xib文件中,文件的所有者设置为UIViewController的子类,并将navigationItem挂钩到UIViewController的navigationItem出口超出我的范围。这似乎是IB / XCode集成中的一个真正漏洞。因为您当然可以将ViewController的实例拖到xib文件中,并将navigationItem拖到ViewController中,然后以这种方式设置title和barbuttonitems。

因此,如果要在IB中定义UITableViewController子类对象的导航栏,则必须在xib文件中创建TableVC对象(不是包含UITableViewController的tableview的.xib文件!)。然后,您可以将TableVC对象挂钩作为另一个对象(如应用程序委托)的出口,如果您在应用程序的整个生命周期中只需要一个TVC实例,或者如果要动态创建TableVC在代码中通过NSBundle类的loadNibNamed:owner:options方法手动加载这个额外的.xib文件。

答案 6 :(得分:1)

这些步骤适用于iOS 9:

  1. 将视图控制器添加到故事板。将UITableViewController设为基类。
  2. 将导航栏对象添加到顶部的视图控制器上。
  3. 在导航栏下方添加一个表格视图。
  4. 将表视图单元格添加到表视图中。
  5. 添加约束。

答案 7 :(得分:-2)

这是另一种简单方式;

  1. 在情节提要板上选择TableViewController屏幕。
  2. 点击右侧菜单中的 Size Inspector 符号,然后找到 Simulated Size
  3. 将固定更改为自由格式

您可以轻松添加导航栏。