在这种情况下我应该使用继承吗?
问题描述:
我需要这段代码添加了一些自定义视图控制器,其中一些来自的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];
}
我的问题是:什么是有这一块最好的方法可用于我的多个视图控制器的代码。遗产?如果是这样,我怎么能在从不同类继承的视图控制器?
答
我倾向于继承两个子类(一个用于UITableViewController
,另一个用于UIViewController
)。这意味着复制代码一次,但这比多次更好。其他任何事情都会变得有点混乱(混合+本土类别的类别)。
答
我会通过将该代码抽象成一个辅助对象来完成它。这样你就可以灵活地知道什么样的对象(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];
你也可以通过在尺寸度量或图片,如果你喜欢,而不必硬编码字符串或数字。
你有导航栏显示吗?我看到你正在使用导航控制器。如果它显示在导航栏中,您可以将该按钮添加到视图中。 – AdamPro13 2014-10-29 17:44:51
我隐藏了导航栏,这就是为什么我需要这个按钮。 – ZviBar 2014-10-29 17:53:47