viewDidLoad方法未使用presentModalDialog方法调用

时间:2011-04-11 19:21:18

标签: iphone cocoa-touch

我使用presentModalDialog来显示viewcontroller的视图但是viewDidLoad永远不会被调用?!

是否有任何方法被调用,我可以放置填充和配置视图的逻辑?

编辑:

放一些代码有点困难,你需要看到这一切,但是这里有:

我有2个笔尖和2个视图控制器(portrait-mainvc / landscape),它们都继承自1个具有逻辑和iboutlet的基类。这是为了让我重用代码。当主控制器中的方向发生变化时,它会在2个控制器(模态对话框)之间切换,而这两个控制器又使用它们各自的笔尖,但它们都使用相同的基本代码来配置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

3 个答案:

答案 0 :(得分:0)

您可以在viewcontroller中尝试这些:

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

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

但是,您应该尝试找到从未调用viewDidLoad的原因。你也可以检查一下 link

答案 1 :(得分:0)

你可能在其中有一个名为presentModalDialog:的自定义函数,因为搜索apple的文档没有该函数。您正在调用加载Xib的自定义函数。

我正在做同样的事情。

你想要这个:

[self presentModalViewController:controller...

ViewDidLoad由控制器调用,如果调用awakeFromNib,你可能会自己获取视图。

答案 2 :(得分:0)

这是目标c中的常见问题: 你应该看看流动的:

1启动视图控制器,您应该在app delegate中以正确的方式初始化它。 2 - 查看视图的文件所有者,它必须是正确的类,通常与uiview的名称相同。