繁体   English   中英

如何在iOS中为自定义后退按钮创建可重复使用的代码

[英]How to create re-usable code in iOS for a custom back button

我创建了一个自定义的后退按钮(下面的代码)。 到目前为止,我一直在每个页面上通过我的应用程序重新粘贴此代码块。 我想知道是否有人可以以我的代码为例,并提供有关如何将其放置到一个集中位置的指示,这样我就不必再复制和粘贴它了。

我猜测这将进入我将创建的自定义类.h和.m,但是我不确定下一步该怎么做,只要代码本身在自定义文件中是什么样。

// Create custom back button

UIButton *backButton      = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage  *backButtonImage = [UIImage imageNamed:@"back.png"];

[backButton setBackgroundImage:backButtonImage
                      forState:UIControlStateNormal];

[backButton addTarget:self
               action:@selector(backButton)
     forControlEvents:UIControlEventTouchUpInside];

[backButton setFrame:CGRectMake(0, 0, 40, 40)];
UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
[[self navigationItem] setLeftBarButtonItem:backButtonItem];

我可能会在UIViewController上使用一个类别,并使用如下接口:

@interface UIViewController (MyBackButton)

- (void)installBackButtonWithAction:(SEL)action;

@end

实现是您问题中的代码,其中@selector(backButton)action代替:

#import "UIViewController+MyBackButton.h"

@implementation UIViewController (MyBackButton)

- (void)installBackButtonWithAction:(SEL)action {
    UIButton *backButton      = [UIButton buttonWithType:UIButtonTypeCustom];
    UIImage  *backButtonImage = [UIImage imageNamed:@"back.png"];

    [backButton setBackgroundImage:backButtonImage
                          forState:UIControlStateNormal];

    [backButton addTarget:self
                   action:action
         forControlEvents:UIControlEventTouchUpInside];

    [backButton setFrame:CGRectMake(0, 0, 40, 40)];
    UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
    [[self navigationItem] setLeftBarButtonItem:backButtonItem];
}

@end

您可以这样称呼它,例如:

- (void)viewDidLoad {
    [super viewDidLoad];
    [self installBackButtonWithAction:@selector(backButton)];
}

您可以创建UINavigationController的子类,并将其更改为将Ito推入其堆栈以设置自定义后退按钮的任何视图控制器的navigationItem 然后,您只需创建自定义类的实例,而不是当前使用的UINavigationController并且每个视图控制器都会自动更新。

您可以将该代码放在某处的类别中 如果您将self设置为目标,则UIViewController可能会起作用。 但是,这有点丑陋,它依赖于您的解雇行动永远不会改变的假设。

您可以做的更清洁的方法是对它进行一些重构,以便通过传入目标( self )和backButton动作( backButton )来创建按钮,并将类别放在UIBarButton上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM