iOS - 如何使backBarButtonItem也执行自定义函数?

时间:2011-10-18 20:03:11

标签: ios backbarbuttonitem

我是iOS开发新手。我使用以下代码来设置我的backBarButtonItem -

UIBarButtonItem *temporaryBarButtonItem=[[UIBarButtonItem alloc] init];
temporaryBarButtonItem.title=@"Back";
self.navigationItem.backBarButtonItem = temporaryBarButtonItem;
[temporaryBarButtonItem release];

我还想让它执行另一个功能,除了回去。那可能吗?或者我需要另一个按钮来保存?

5 个答案:

答案 0 :(得分:7)

您实际上可以使用viewDidDisappearviewWillDisappear方法执行此操作。

如果此视图只能返回并且不显示任何视图,那么这应该有效。

但是,如果您计划展示子视图,模态视图,深入导航层次结构,或执行其他导致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艺术品:

https://github.com/0xced/UIKit-Artwork-Extractor

答案 4 :(得分:1)

您应该可以执行此类操作,而不是使用viewDidDisappearviewWillDisappear

将其放在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];
}

注意:最终会使用不带箭头的矩形按钮。