每个viewdidload中的代码相同

时间:2012-12-28 15:44:26

标签: objective-c ios uiviewcontroller

我在每个ViewController中都有相同的代码,它设置了ViewControllers视图的backgroundcolor,它改变了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"]]];

3 个答案:

答案 0 :(得分:4)

这是子类化的完美案例。

创建一个UIViewController的子类,它覆盖执行代码的viewDidLoad方法,然后让需要这种行为的每个其他视图控制器成为它的子类。

答案 1 :(得分:1)

您有两种选择。

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

2)创建一个从每个viewDidLoad调用的“帮助器”类。您仍然需要为每个viewDidLoad添加一行代码,但至少只有一行。如果您需要更改颜色或其他,只需更改一个类而不是每个视图控制器。

答案 2 :(得分:1)

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

创建UIViewController的子类作为基本视图控制器(甚至可以称之为BaseViewController!)

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