我需要将这段代码添加到许多自定义视图控制器中,其中一些从UITableViewController继承而其他视图从UIViewController继承:
self.backButton = [[UIButton alloc] initWithFrame:CGRectMake(10, 30, 40, 40)];
UIImage *image = [UIImage imageNamed:@"backButton.png"];
[self.backButton setBackgroundImage:image forState:UIControlStateNormal];
[self.view addSubview:self.backButton];
[self.backButton addTarget:self action:@selector(backButtonPressed) forControlEvents:UIControlEventTouchUpInside];
- (void)backButtonPressed{
[self.navigationController popViewControllerAnimated:YES];
}
我的问题是:在我的多个视图控制器中提供这段代码的最佳方法是什么。遗产?如果是这样,我怎样才能在从不同类继承的视图控制器中拥有它?
答案 0 :(得分:0)
我倾向于使用两个子类继承(一个用于UITableViewController
,一个用于UIViewController
)。这意味着复制代码一次,但这比多次好。其他任何东西都有点混乱(混合+本地类的类别)。
答案 1 :(得分:0)
我会通过将代码抽象为辅助对象来实现。这样你就可以灵活地调用什么类型的对象(UIViewController,UITableViewController,其他任何东西)来调用它。
ButtonHelper.m可能会实现以下内容:
-(UIButton *)backButtonForViewController:(UIViewController *)viewController
{
UIButton *backButton = [[UIButton alloc] initWithFrame:CGRectMake(10, 30, 40, 40)];
UIImage *image = [UIImage imageNamed:@"backButton.png"];
[backButton setBackgroundImage:image forState:UIControlStateNormal];
[viewController.view addSubview:backButton];
[backButton addTarget:viewController action:@selector(backButtonPressed) forControlEvents:UIControlEventTouchUpInside];
return backButton;
}
如果您喜欢它们,它可以是静态方法,或者您可以在原始类中创建ButtonHelper的实例。然后打电话者可以说:
self.backButton = [ButtonHelper backButtonForViewController:self];
如果您愿意,也可以传递尺寸指标或图像,而不是使用硬编码的字符串或数字。