我是iOS开发新手。我使用以下代码来设置我的backBarButtonItem -
UIBarButtonItem *temporaryBarButtonItem=[[UIBarButtonItem alloc] init];
temporaryBarButtonItem.title=@"Back";
self.navigationItem.backBarButtonItem = temporaryBarButtonItem;
[temporaryBarButtonItem release];
我还想让它执行另一个功能,除了回去。那可能吗?或者我需要另一个按钮来保存?
答案 0 :(得分:7)
您实际上可以使用viewDidDisappear
或viewWillDisappear
方法执行此操作。
如果此视图只能返回并且不显示任何视图,那么这应该有效。
但是,如果您计划展示子视图,模态视图,深入导航层次结构,或执行其他导致viewDidDisapper
被调用的视图操作,那么您需要将您的背面分开 - 按钮代码逻辑不知何故。
例如,如果您将从此视图中显示模态视图,则可以检查self.modalViewController
是否为nil,如果是,则表示您没有模态视图,并且可以安全地执行后退按钮代码。如果它不是nil那么你有一个模态视图,不应该执行后退代码。 (viewWillDisappear
应将模态视图控制器注册为非零值。
答案 1 :(得分:3)
很简单,试试这个!
[[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(myCoolAction:)];
然后你要做的就是将myCoolAction:改为视图控制器中的适当方法并处理它。享受!
编辑:哦,如果你想将它用于backBarButtonItem,它将无法按你的预期工作。系统不会为backBarButtonItem调用您的目标/操作。一旦分配给backBarButtonItem,它们就会被清除。
处理此问题的一种方法是将UINavigationController作为委托连接起来。然后在你的
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
你可以在那里做一些自定义行为的方法。
答案 2 :(得分:1)
您可以在xib中添加UIBarButtonItem并在那里添加处理程序事件。
另外用自定义视图创建UIBarButtonItem,这是一个UIButton和add事件处理程序。
答案 3 :(得分:1)
严格来说,UIKit无法做到这一点。
请参阅backBarButtonItem
上的文档:
您设置的后栏按钮项目的目标和操作应该是 零。默认值是显示导航的条形按钮项 项目的标题。
解决方法是指定leftBarButtonItem
并通过附加@selector
目标来附加您需要的任何自定义行为。
棘手的一点是按钮的图像本身。如您所知,默认值不是矩形按钮。而是它具有左侧箭头形状。为此,您需要设置自定义图像以使按钮显示为默认值。
有很多资源要做,包括这个提取所有UIKit艺术品:
答案 4 :(得分:1)
您应该可以执行此类操作,而不是使用viewDidDisappear
或viewWillDisappear
。
将其放在viewDidLoad
:
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleDone target:self action:@selector(cancelButtonAction:)];
self.navigationItem.leftItemsSupplementBackButton = NO;
然后,您可以为自定义代码创建方法cancelButtonAction cancelButtonAction
,并为此创建后退功能:
- (void)cancelButtonAction:(id)sender {
//Your custom code goes here...
//This will perform the back functionality if using a Navigation Controller
[self.navigationController popViewControllerAnimated:YES];
}
注意:最终会使用不带箭头的矩形按钮。