繁体   English   中英

每个viewdidload中的代码相同

[英]Same code in every viewdidload

我在每个ViewController中都有相同的代码,它设置ViewControllers视图的背景色,并更改navbaritem的backbutton和titleview。 有办法避免这种情况吗?

UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 37, 24)];
[button setImage:[UIImage imageNamed:@"Navbar_BackButton.png"] forState:UIControlStateNormal];
[button addTarget:self action:@selector(backButtonTabbed:) forControlEvents:UIControlEventTouchDown];
[button setImageEdgeInsets:UIEdgeInsetsMake(0, 0, 0, -10)];
UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:button];

[navbarItem setLeftBarButtonItem:barButton];

[navbarItem setTitleView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Navbar_Title.png"]]];

[[self view] setBackgroundColor:[[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"Login_Background.png"]]];

这是子类化的完美案例。

创建UIViewController的子类,该子类将覆盖执行代码的viewDidLoad方法,然后将需要这种行为的所有其他视图控制器作为其子类。

您有两个选择。

1)创建一个通用基类,您所有的视图控制器都将从该基类扩展。 缺点是您可能需要两个-一个用于UIViewController ,一个用于UITableViewController 在这两个类中,您将放置此通用代码。

2)创建一个“ helper”类,您可以从每个viewDidLoad调用它。 您仍然需要向每个viewDidLoad添加一行代码,但至少只有一行。 如果需要更改颜色或其他任何内容,则只需更改一个类,而不是每个视图控制器。

这是面向对象编程中继承功能的完美示例!

创建UIViewController的子类以充当您的基本视图控制器(甚至可以将其称为BaseViewController!)

然后,使所有其他视图控制器成为此基本视图控制器的子类,而不是UIViewController的子类。 由于这些子类将调用[super viewDidLoad] ,因此它们将继承基本视图控制器的viewDidLoad方法中的代码,该方法应包含您的外观代码!

暂无
暂无

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

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