0

我在每个 ViewController 中都有相同的代码,它设置 ViewControllers 视图的背景颜色,并更改导航栏的后退按钮和标题视图。有没有办法避免这种情况?

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"]]];
4

3 回答 3

4

这是子类化的完美案例。

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

于 2012-12-28T15:50:58.637 回答
1

你有两个选择。

1) 创建一个通用基类,所有视图控制器都从该基类扩展。不利的一面是您可能需要两个 forUIViewController和一个 for UITableViewController。在这两个类中,您将放置此公共代码。

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

于 2012-12-28T15:51:40.817 回答
1

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

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

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

于 2012-12-28T15:52:08.563 回答