繁体   English   中英

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

[英]How do I add a Navigation Bar to a UITableViewController in Interface Builder?

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

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

提前致谢。

从大纲视图中,确保选中了表视图控制器

然后转到Editor菜单,单击Embed In子菜单,选择Navigation Controller并选择。 您的导航控制器指向您的tableview控制器,内置关系。

对于顶部带有编辑按钮的表视图,使用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;
}

并且,您的UINavigationController视图显示为一个表视图,导航栏右侧有一个编辑按钮。

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

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

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

编辑

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

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

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

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

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

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

为什么在世界上你不能将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文件。

这些步骤适用于iOS 9:

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

这是另一种简单的方法;

  1. 在故事板上选择TableViewController屏幕。
  2. 单击右侧菜单上的“ 大小检查器”符号,然后找到“ 模拟大小”
  3. 将固定更改为自由格式

您可以轻松添加导航栏。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM