2011-04-11 57 views
0

我使用presentModalDialog來顯示viewcontroller的視圖,但是viewDidLoad永遠不會被調用?!未使用presentModalDialog方法調用viewDidLoad方法

是否有任何方法可以調用我的邏輯來填充和配置視圖?

編輯:

這是一個有點難以放在一個很小的代碼量,你有種需要看到這一切,但這裏有雲:

我有兩個筆尖和2個視圖控制器(縱向狀態mainvc/landscape),它們都從具有邏輯和iboutlets的1個基類繼承而來。這是爲了讓我重新使用代碼。當主控制器中的方向改變時,它在兩個控制器(模態對話框)之間切換,而這兩個控制器又使用它們各自的筆尖,但是它們都使用相同的基本代碼來配置UI項目。

@implementation HomeViewControllerBase 

- (void)configureBestSellItems 
{ 
    [self startRetrievingRegions]; 

    // load all the images from our bundle and add them to the scroll view 
    // NSUInteger i; 
    for (int i = 0; i <= 150; i++) 
    { 
     NSString *imageName = @"tempImage.jpg"; 
     UIImage *image = [UIImage imageNamed:imageName]; 
     UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; 

     // setup each frame to a default height and width, it will be properly placed when we call "updateScrollList" 
     CGRect rect = imageView.frame; 
     rect.size.height = kScrollObjHeight; 
     rect.size.width = kScrollObjWidth; 
     imageView.frame = rect; 
     imageView.tag = i; // tag our images for later use when we place them in serial fashion 
     [self.bestSellScrollView addSubview:imageView]; 
     [imageView release]; 
    } 

    [self layoutScrollImages]; // now place the photos in serial layout within the scrollview 
} 


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self configureBestSellItems]; 
} 

@end 

@interface HomeViewController : HomeViewControllerBase 
{ 

} 

@interface HomeViewController_Landscape : HomeViewControllerBase 
{ 

} 

@implementation HomeViewController 

//This works for portrait 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
} 

@end 

@implementation HomeViewController_Landscape 

//This does not work 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
} 

//This works as suggested 
- (void)awakeFromNib 
{ 
    [super configureBestSellItems]; 
} 

@end 
+0

你能提供一些代碼嗎?聽起來很奇怪,你有沒有想過調用viewDidLoad的超類實現? – LuckyLuke 2011-04-11 19:55:21

+0

+1發佈一些代碼。 'viewDidLoad'將永遠被調用,所以在你的實現中有一些東西。 – XJones 2011-04-11 20:59:25

+0

@Andreas - 我已經添加了一些代碼,很想聽聽您的意見 – TheLearner 2011-04-12 08:33:01

回答

0

您可以嘗試這些在你的ViewController:

-(void)awakeFromNib 
{ 
    [super awakeFromNib]; 
    // your code here 
} 

-(void) viewWillAppear:(BOOL)animated{ 
    [super viewWillAppear:animated]; 
    // your code here 
} 

但是,你應該嘗試找出爲什麼viewDidLoad中永遠不會被調用。您也可以檢查這個 link

+0

不太喜歡這個答案。 'awakeFromNib'可以工作,但'viewWillAppear'會產生不希望的副作用,因爲視圖可能會出現/消失而不需要重新加載。找出爲什麼'viewDidLoad''沒有被調用會好得多。「很難說沒有看到一些代碼。無論何時加載,這都是修改視圖的適當位置。 – XJones 2011-04-11 20:58:26

+0

我不喜歡'awakeFromNib'的另一個原因是使用IB的特定情況。如果你像我一樣,你最終決定以編程的方式創建所有的視圖,'awakeFromNib'將不再被調用。如果您修復並使用'viewDidLoad',則在用'loadView'替換IB創建的內容後,您不必更改代碼。如果你嘗試使用'awakeFromNib',確保調用'[super awakeFromNib]'作爲第一行。 – XJones 2011-04-11 21:11:55

+0

這個作品,但我很想聽到@XJones認爲我編輯的文章是什麼 – TheLearner 2011-04-12 08:33:38

0

您可能在那裏有一個名爲presentModalDialog的自定義函數:,因爲搜索apple的文檔沒有該函數。您正在調用加載Xib的自定義函數。

我正在做同樣的事情。

你想這樣的:

[self presentModalViewController:controller... 

viewDidLoad中被稱爲控制器,如果被稱爲awakeFromNib,你可能得到,其本身的看法。

0

它的目標C一個共同的問題: 應查看流動:視圖控制器的

1開始,你應該在應用程序代理以正確的方式進行初始化。 2審查視圖的文件所有者它必須是通常與uiview同名的正確類。