2011-04-11 66 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同名的正确类。