2014-10-29 150 views
0

我需要這段代碼添加了一些自定義視圖控制器,其中一些來自的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

回答

0

我傾向於繼承兩個子類(一個用於UITableViewController,另一個用於UIViewController)。這意味着複製代碼一次,但這比多次更好。其他任何事情都會變得有點混亂(混合+本土類別的類別)。

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

你也可以通過在尺寸度量或圖片,如果你喜歡,而不必硬編碼字符串或數字。

相關問題