2013-12-16 39 views
0

我創建了一個帶有註銷按鈕的視圖,並且我試圖使其成爲另一個視圖的子視圖。註銷按鈕視圖有一個xib和一個與xib相關的控制器。撰寫iOS視圖

我該怎麼做才能讓這個視圖/控制器成爲我另一個視圖的一部分?

我之前完成此任務的方式是通過編程方式自行繪製視圖,將該視圖作爲另一個視圖的一部分在界面構建器中繪製並更改該視圖的類。因爲我希望這種觀點能夠對方法做出反應,所以我讓它有一個協議,然後讓控制器成爲實現的子視圖。

這是唯一的方法嗎?還是有一種方式,我有我的註銷視圖,我可以'放入'其他視圖的獨立控制器,因爲另一種方法的缺點是,每個想要使用此子視圖的視圖必須實現協議即使這種方法在每個視圖中都是一樣的。

回答

0

創建一個超類來抽象註銷行爲。然後,支持註銷的每個UIViewController應該繼承該超類。在超類中,提供註銷的方法。

這種方法可以使您簡單地將Interface Builder中的UIControls連接到超類中的公共IBAction,或者甚至在調用超類方法之前在子類中添加特定的自定義。

這裏有一個可能的例子:

LogoutViewController.h

#import <UIKit/UIKit.h> 

@interface LogoutViewController : UIViewController 
-(void)performLogout; 
@end 

LogoutViewController.m

#import "LogoutViewController.h" 

@interface LogoutViewController() 

@end 

@implementation LogoutViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
} 

- (void)performLogout 
{ 
    //do logout code 
} 

- (IBAction)logout:(id)sender 
{ 
    [self performLogout]; 
} 

@end 

SomeOtherViewController.h

#import <UIKit/UIKit.h> 
#import "LogoutViewController.h" 

@interface SomeOtherViewController : LogoutViewController 

@end 

SomeOthe rViewController.m

#import "SomeOtherViewController.h" 

@implementation SomeOtherViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
} 

- (IBAction)mySpecificLogoutButtonPressed:(id)sender 
{ 
    self.title = @"Good bye"; 
    // do other code specific to logging out from this UIVC 
    [super performLogout]; 
} 

@end 
+0

爲什麼所有那些UIViewControllers必須知道這種註銷行爲?有沒有辦法讓我有一個註銷按鈕的視圖,並有一個控制器處理所有內容,並簡單地將其作爲視圖的一部分?這似乎是更多面向對象的方式 – praks5432

+0

我不同意這種方法更面向對象。在我提出的解決方案中,每個支持註銷的UIViewController都是通過超類定義的。話雖如此,如果你真的想採取你的方法,調查UIViewController遏制API。我不認爲這適合這種用例,因爲註銷按鈕很可能控制屏幕上的全部UIView,而不僅僅是屏幕的一小部分。 –

0

您可以使用NSNotificationCenter。因此,您可以在註銷按鈕操作上發佈通知。您可以檢查documentation

希望這會有所幫助。