【发布时间】:2011-02-01 00:44:19
【问题描述】:
我不确定我在这里缺少什么。我有一个自定义UINavigationController,我正在尝试将持久性UIBarButtonItem 添加到酒吧。
我在这里错过了什么? - 顺便说一句,我不想/不会使用 IB。
更新: 目前这是我能得到的最接近的:
-(void)viewDidLoad { self.navigationBar.barStyle = UIBarStyleBlack; UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 20, 320, 44)]; navBar.barStyle = UIBarStyleBlack; UINavigationItem *navItem = [[UINavigationItem alloc] initWithTitle:@"正在播放..."]; [navBar pushNavigationItem:navItem 动画:NO]; UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithTitle:@"Close" style:UIBarButtonItemStyleBordered target:self action:@selector(goBack:)]; navItem.rightBarButtonItem = 编辑按钮; [self.view addSubview:navBar]; [编辑按钮释放]; [导航项发布]; [导航栏发布]; [超级视图DidLoad]; }太糟糕了,我必须将整个导航栏添加到已经有导航栏的 UINavigationController....如果我尝试使用现有的,我会收到此错误:
....真的吗???
【问题讨论】:
-
那么会发生什么?您是否看到您的 UINavigationController 但它没有自定义栏按钮?您是否在上述方法中添加了 break 并且它确实被调用了?您逐步完成了它并且没有对象引用为零?您单步执行了调用该方法的方法,您可以看到导航栏已正确安装?
-
调试器显示确实有,但实际显示什么都没有。值得一提的是,正如声明的那样,条形图是黑色的。
-
将顶层代码放在根视图控制器中,而不是在 UINavigationController 中。另外,在第二种情况下你的错误的原因是你没有像那样推动导航栏。当您使用导航控制器时,您将新的视图控制器推送到导航控制器堆栈上。这些新的视图控制器然后根据需要自定义它们的导航项。
-
所以如果我想重用这个自定义 UINavigationController,每次创建它时,我都必须使用根控制器重置导航栏和那个按钮?这听起来很忙。我希望我不必每次都记住,并将其自动作为该自定义类的独特性质的一部分。有没有办法把这个逻辑放到类里?
-
通常你不会继承 UINavigationController。相反,您创建自己的 UIViewController 子类,并在创建 UINavigationController 时将其用作根视图控制器。然后所有的自定义都进入你的自定义 UIViewController。
标签: objective-c iphone uinavigationcontroller uibarbuttonitem