4

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

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

除了返回之外,我还希望它执行另一个功能。那可能吗?还是我需要另一个按钮来保存?

4

5 回答 5

7

您实际上可以在您的viewDidDisappearorviewWillDisappear方法中做到这一点。

如果这个视图只能返回并且不呈现任何视图,那么这应该可以工作。

但是,如果您计划呈现子视图、模式视图、深入导航层次结构或执行其他会导致viewDidDisapper调用的视图操作,那么您需要以某种方式分离您的后退按钮代码逻辑。

例如,如果您将从此视图显示模态视图,您可以检查是否self.modalViewController为 nil,如果是,则您没有模态视图,并且可以安全地执行后退按钮代码。如果它不是 nil,那么你有一个模态视图,不应该执行后退按钮代码。(viewWillDisappear应该将模态视图控制器注册为非零)。

于 2011-10-18T20:37:09.543 回答
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

方法你可以在那里做一些自定义行为。

于 2011-10-18T20:20:34.610 回答
2

严格来说,这不能用 UIKit 完成。

请参阅以下文档backBarButtonItem

您设置的后退栏按钮项的目标和操作应为零。默认值为显示导航项标题的条形按钮项。

解决方法是指定 aleftBarButtonItem并通过附加@selector目标来附加您需要的任何自定义行为。

棘手的一点是按钮的图像本身。如您所知,默认不是矩形按钮。相反,它具有左侧箭头形状。为此,您需要设置自定义图像以使按钮显示为默认值。

有大量的资源可以做到这一点,其中包括提取所有 UIKit 艺术品的资源:

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

于 2012-04-11T14:23:04.413 回答
1

您可以在 xib 中添加 UIBarButtonItem 并在那里添加处理程序事件。

否则使用自定义视图创建 UIBarButtonItem,这是一个 UIButton 并添加事件处理程序。

于 2011-10-18T20:13:28.257 回答
1

你应该能够做这样的事情而不是使用viewDidDisappearor viewWillDisappear

把它放在viewDidLoad

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleDone target:self action:@selector(cancelButtonAction:)];
self.navigationItem.leftItemsSupplementBackButton = NO;

然后,您可以为您的自定义代码创建方法 cancelButtonActioncancelButtonAction和返回功能,如下所示:

- (void)cancelButtonAction:(id)sender {
    //Your custom code goes here...


    //This will perform the back functionality if using a Navigation Controller
    [self.navigationController popViewControllerAnimated:YES];
}

注意:这最终将使用一个矩形按钮,没有箭头。

于 2013-10-10T20:37:00.680 回答