每个ViewDidload中的代码相同



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

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)创建一个从每个viewDidLoad调用的"助手"类。您仍然需要向每个viewDidLoad添加一行代码,但至少它只是一行。如果您需要更改颜色或其他任何内容,则只需更改一个类而不是每个视图控制器。

这是以对象为导向的编程中继承力量的完美示例!

创建一个UIViewController的子类充当您的基础视图控制器(您可以称其为baseviewController,甚至可以称为!)

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

最新更新