[英]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.