我有一个UITableViewController A,它将UITableViewController B推送到堆栈上。
在A中我有代码:
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Trending"
style:UIBarButtonItemStylePlain
target:self
action:@selector(backButtonClicked:)];
backButtonClicked:也已实现。
B的标题为趋势,但当我点击它时,它无法触及backButtonClicked:
为什么会这样?
答案 0 :(得分:1)
尝试设置委托:
[navigationController setDelegate:self];
或使用左键。有时后退按钮不适用于某些视图,我不得不使用左按钮:
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Trending" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonClicked:)];
此外,您可以尝试设置B的按钮项而不是A:
viewControllerB.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Trending" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonClicked:)];
答案 1 :(得分:1)
在Xcode文档中,它声明backBarButtonItem目标和操作应设置为nil。因此,即使你确实设置了它,它也可能是一个很好的选择,它会被忽略。您可以查看下面的链接,将自定义行为添加到后退按钮。
Custom Action on Back Button Item
或者您可以在viewControllerB中执行以下操作:
self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Trending"
style:UIBarButtonItemStylePlain
target:self
action:@selector(backButtonClicked:)] autorelease];
然后还将其添加到viewControllerB
- (void)backButtonClicked:(id)sender {
[[[self.navigationController viewControllers] objectAtIndex:0] backButtonClicked:sender];
[self.navigationController popViewControllerAnimated:YES];
}
上面的方法将找到RootViewController并向其发送backButtonClicked消息。然后它将弹出当前视图控制器,这应该允许您模拟backBarButtonItem。您还可以通过更改objectAtIndex方法中的值来更改要发送消息的视图控制器。
答案 2 :(得分:0)
尝试不使用backBarButtonItem而是使用leftBarButtonItem
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Trending" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonClicked:)];
self.navigationItem.hidesBackButton=YES;
对我来说,它就像一个魅力。并且不要忘记您没有释放此按钮 - 它可能导致内存泄漏。所以你可以在为你指定按钮时添加自动释放按钮或者像这样添加
UIBarButtonItem *myBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Trending" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonClicked:)];
self.navigationItem.leftBarButtonItem = myBackButton;
[myBackButton release];
self.navigationItem.hidesBackButton=YES;