在这种情况下我应该使用继承吗?

问题描述:

我需要这段代码添加了一些自定义视图控制器,其中一些来自的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

你有导航栏显示吗?我看到你正在使用导航控制器。如果它显示在导航栏中,您可以将该按钮添加到视图中。 – AdamPro13 2014-10-29 17:44:51

+0

我隐藏了导航栏,这就是为什么我需要这个按钮。 – ZviBar 2014-10-29 17:53:47

我倾向于继承两个子类(一个用于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]; 

你也可以通过在尺寸度量或图片,如果你喜欢,而不必硬编码字符串或数字。