为啥我必须在实现自定义左 barButtonItem 之前隐藏后退按钮项?

Posted

技术标签:

【中文标题】为啥我必须在实现自定义左 barButtonItem 之前隐藏后退按钮项?【英文标题】:Why do I have to hide back button item before implementing custom left barButtonItem?为什么我必须在实现自定义左 barButtonItem 之前隐藏后退按钮项? 【发布时间】:2013-12-31 05:03:53 【问题描述】:

这是我删除导航栏背面 UIBarButtonItem 并将其替换为取消按钮的代码:

UIBarButtonItem *cancelButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.hidesBackButton = YES;
self.navigationItem.leftBarButtonItem = cancelButtonItem;

我在网上看到的每个示例都不会在将 backButton 替换为自定义项之前隐藏它。我可能错了,但这似乎是一行不需要的代码。

【问题讨论】:

【参考方案1】:

您是否尝试过以UIBarButtonItem 的风格使用UIBarButtonSystemItemCancel 而不是UIBarButtonItemStylePlain

试试这个,

    UIBarButtonItem* cancelButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelAction)];
    self.navigationItem.leftBarButtonItem = cancelButton;

此外,如果您在parentViewController 中使用了self.navigationItem.backBarButtonItem,如果您在childViewController 中的自定义leftBarButton 未正确添加,它将默认在childViewController 的leftBarButtonItem 中显示该按钮。

【讨论】:

【参考方案2】:

试试这个。 在您的应用程序代表完成启动时写下这个。

LoginViewController *loginVc = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
        self.navigationController = [[UINavigationController alloc] initWithRootViewController:loginVc];

    self.window.rootViewController = self.navigationController;
    self.navigationController.navigationBarHidden =YES;

// and use uibutton in your view controller at place of back button or cancel button
// and u can push or pop your view from there.

【讨论】:

以上是关于为啥我必须在实现自定义左 barButtonItem 之前隐藏后退按钮项?的主要内容,如果未能解决你的问题,请参考以下文章

切换到 Gradle:为啥我必须防止自定义视图被混淆?

为啥在android studio 布局中使用自定义控件就报错

为啥这个自定义指针类会崩溃?

用自定义链式栈解决力扣括号匹配问题

用自定义链式栈解决力扣括号匹配问题

为啥即使在自定义 OnTouchListener 实现后 RecyclerView 仍然滚动?