【问题标题】:Adding UIBarButtonItem to UINav..Controller将 UIBarButtonItem 添加到 UINav..Controller
【发布时间】:2011-02-01 00:44:19
【问题描述】:

我不确定我在这里缺少什么。我有一个自定义UINavigationController,我正在尝试将持久性UIBarButtonItem 添加到酒吧。

-(void)viewDidLoad { self.navigationBar.barStyle = UIBarStyleBlack; UIBarButtonItem *bbi = [[UIBarButtonItem alloc] initWithTitle:@"Nope..." 样式:UIBarButtonItemStyleBordered 目标:自己 动作:@selector(goBack:)]; self.navigationItem.leftBarButtonItem =bbi; [bbi 发布]; } -(void)goBack:(id)sender { NSLog(@"现在回去"); }

我在这里错过了什么? - 顺便说一句,我不想​​/不会使用 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....如果我尝试使用现有的,我会收到此错误:

'NSInternalInconsistencyException',原因:'无法调用 pushNavigationItem:animated:直接在控制器管理的 UINavigationBar 上。'

....真的吗???

【问题讨论】:

  • 那么会发生什么?您是否看到您的 UINavigationController 但它没有自定义栏按钮?您是否在上述方法中添加了 break 并且它确实被调用了?您逐步完成了它并且没有对象引用为零?您单步执行了调用该方法的方法,您可以看到导航栏已正确安装?
  • 调试器显示确实有,但实际显示什么都没有。值得一提的是,正如声明的那样,条形图是黑色的。
  • 将顶层代码放在根视图控制器中,而不是在 UINavigationController 中。另外,在第二种情况下你的错误的原因是你没有像那样推动导航栏。当您使用导航控制器时,您将新的视图控制器推送到导航控制器堆栈上。这些新的视图控制器然后根据需要自定义它们的导航项。
  • 所以如果我想重用这个自定义 UINavigationController,每次创建它时,我都必须使用根控制器重置导航栏和那个按钮?这听起来很忙。我希望我不必每次都记住,并将其自动作为该自定义类的独特性质的一部分。有没有办法把这个逻辑放到类里?
  • 通常你不会继承 UINavigationController。相反,您创建自己的 UIViewController 子类,并在创建 UINavigationController 时将其用作根视图控制器。然后所有的自定义都进入你的自定义 UIViewController。

标签: objective-c iphone uinavigationcontroller uibarbuttonitem


【解决方案1】:

navigationItem 不能设置在 UINavigationController 实例上,而是设置在显示在导航控制器“内部”的 view 的视图控制器上。

如果您的控制器本身被推入另一个导航控制器,则在导航控制器上设置 self.navigationItem 将起作用。

【讨论】:

    猜你喜欢
    • 2016-11-24
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多