簡體   English   中英

兩個視圖控制器和委托的可重用性

[英]two view controllers and reusability with delegate

關於objC中的設計模式的新手問題。 我正在為我的iPhone應用程序編寫一項功能,該功能也計划在其他應用程序中使用。 該功能是通過兩個類(Viewcontroller1和Viewcontroller2)編寫的。 Viewcontroller1是導航控制器的根視圖,它可以推送Viewcontroller2。 該應用程序的其余部分將僅使用ViewController1,並且永遠不會直接訪問Viewcontroller2。 但是,由於用戶事件的觸發,Viewcontroller2必須向應用程序的其余部分發送一條消息。 我的問題是實現它的最佳方法是什么?

當前,我使用兩個級別的委派從Viewcontroller2發送消息。 首先將其發送到Viewcontroller1,然后讓Viewcontroller1將其發送到應用程序的其余部分或應用程序委托。 所以我的代碼看起來像-

//Viewcontroller1.h
@protocol bellDelegate 
    -(int)bellRang:(int)size;
@end

@interface Viewcontroller1 : UITableViewController <dummydelegate> {
    id <bellDelegate> delegate;
@end

//Viewcontroller1.m
@implementation Viewcontroller1
-(void)viewDidLoad {
  //some stuff here
  Viewcontroller2 *vc2 = [[Viewcontroller2 alloc] init];
  vc2.delegate = self;
  [self.navigationController pushViewController:vc2
                                       animated:YES];
 }

-(int)dummyBell:(int)size {
return([self.delegate bellRang:size]);
}

//Viewcontroller2.h
@protocol dummyDelegate 
    -(int)dummyBell:(int)size;
@end

@interface Viewcontroller2 : UITableViewController {
    id <dummyDelegate> delegate;
@end

//Viewcontroller2.m
@implementation Viewcontroller2

-(int)eventFoo:(int)size {
rval = [self.delegate dummyBell:size];
}
@end

我會說實現很好,但這並不一定是您應該添加另一個抽象級別來獲得可重用性的情況,因為這只是在對象周圍傳遞消息的通用且推薦的方法,即“委托” Apple有關委托的文檔

另外,對於您必須向“應用程序的其余部分”發送消息的問題情況,您應該考慮通知,在某些情況下通知可能非常節省時間。 Apple的通知文檔關於委托與通知的問題

那是做事的正確方法! 如果要在viewController2上調用所有委托方法,則可能只有一個協議,並且直接將委托從viewController1分配給viewControler2,但它會阻止您第一次需要從viewControler1調用委托。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM