将目标添加到导航栏中的库存返回按钮
Posted
技术标签:
【中文标题】将目标添加到导航栏中的库存返回按钮【英文标题】:Add target to stock back button in navigationBar 【发布时间】:2013-11-19 07:02:18 【问题描述】:我在UINavigationBar
中设置标题和后退按钮的值如下:
self.navigationItem.title = @"Post";
[self.navigationController.navigationBar setTitleTextAttributes:@NSForegroundColorAttributeName : [[UIColor blueColor] colorWithAlphaComponent:0.75f],
NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue" size:20]];
[self.navigationController.navigationBar.backItem setTitle:@"Pop Pop !"];
但我无法将目标添加到后退按钮。我尝试了以下方法:
[self.navigationItem.backBarButtonItem setTarget:self];
[self.navigationItem.backBarButtonItem setAction:@selector(goBack:)];
和
self.navigationItem.backBarButtonItem.target = self;
self.navigationItem.backBarButtonItem.action = @selector(goBack:);
但是在弹出 viewController 时没有调用我的选择器。
如何向 backButton 添加目标,或在弹出 viewController 时调用选择器? (我已经尝试过 SO 中提到的所有可能的解决方案,但都是徒劳的)
编辑:我更喜欢编辑股票 backButton 的行为,而不是将自定义按钮设置为 backButton。
【问题讨论】:
【参考方案1】:您不能将目标添加到股票 BackButton,但您可以在 CustomNavigationController 中覆盖 UINavigationBarDelegate 方法,如下所示:
class CustomNavigationController: UINavigationController
@IBOutlet weak var ibNavigationBar: UINavigationBar!
override func viewDidLoad()
super.viewDidLoad()
ibNavigationBar.delegate = self
extension CustomNavigationController: UINavigationBarDelegate
func navigationBar(navigationBar: UINavigationBar, shouldPopItem item: UINavigationItem) -> Bool
for viewController in viewControllers
if viewController.title == "YourTitledViewController"
popToViewController(viewController, animated: true)
return false
【讨论】:
【参考方案2】:我有两个解决方案给你,因为你不能在你的后退按钮上添加目标或动作:
1- 添加一个新的 barButtonItem 并调用它并将您的选择器添加到它,然后将它放在 navigationItem.leftBarButtonItem 中。不要忘记弹出!
2- 覆盖 viewWillDisAppear 方法,并在那里做任何你想做的事情。如果你的视图控制器没有将你引导到另一个视图控制器,而是前一个......
如果您还有其他问题,请询问 (Y)
【讨论】:
【参考方案3】:您不能以这种方式更改backBarButtonItem
操作。
我在这里看到了 2 个可能的解决方案:
要实现自定义后退按钮,可以随心所欲地操作
这是一个很好的解决方案,如何在需要时覆盖标准返回事件并阻止 popViewController
https://github.com/onegray/UIViewController-BackButtonHandler/tree/master
【讨论】:
【参考方案4】:你不能将目标添加到后退按钮。您可以添加 leftbarbutton 项目并为其添加目标。
UIBarButtonItem *tmpButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backAction:)];
self.navigationItem.leftBarButtonItem = tmpButtonItem;
【讨论】:
【参考方案5】:隐藏后退按钮的第一个
self.navigationItem.hidesBackButton = YES;
然后你制作自定义按钮
UIButton *leftbarButton = [UIButton buttonWithType:UIButtonTypeCustom];
leftbarButton.frame =CGRectMake(70, 3, 65, 32);
[leftbarButton setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
[leftbarButton addTarget:self action:@selector(leftbarbuttonclick) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *newdbutton =[[UIBarButtonItem alloc] leftbarButton];
并将其添加到导航左栏按钮项
self.navigationItem.leftBarButtonItem =newbutton;
现在给它添加动作
-(void)leftbarbuttonclick
// Your code
【讨论】:
【参考方案6】:在我的头顶上。试试这样的
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(goBack:)];
tap.numberOfTapsRequired = 1;
[self.navigationItem.backBarButtonItem addGestureRecognizer:tap];
【讨论】:
以上是关于将目标添加到导航栏中的库存返回按钮的主要内容,如果未能解决你的问题,请参考以下文章