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

kly*_*aek 42 iphone interface-builder uinavigationbar uitableview ios

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

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

提前致谢.

Gre*_*eso 53

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

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

  • 这应该是选定的答案. (3认同)

小智 18

对于顶部带有编辑按钮的表视图,使用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;
}
Run Code Online (Sandbox Code Playgroud)

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

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


jle*_*ehr 12

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

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

编辑

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

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

这样做的好处是允许在Interface Builder中创建和配置所有视图组件,并且不需要UITableViewController从头开始实现方法.你需要照顾的表视图控制器的父,唯一的细节是添加表视图作为父母的内容视图的子视图viewDidLoad.

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

  • 这不会设置"导航栏",但会创建一个包含导航栏的表标题视图,其行为方式非常不同.首先,标题随表格滚动.另一方面,如果您在主根控制器的.xib文件中的"基于导航的应用程序"中执行此操作,您将获得"双导航栏",因为*real*导航栏在MainWindow.xib中指定 (3认同)
  • 这是一个很好的解决方案.使用UIViewController而不是UITableViewController并不难.控制器只需要符合UITableViewDelegate和UITableViewDataSource,然后从IB中需要设置表视图的委托和dataSource.其余代码与UITableViewController相同 (3认同)

coc*_*oob 9

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


das*_*dom 4

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