使用'presentModalViewController'加载视图

时间:2009-11-28 23:31:16

标签: iphone uiviewcontroller

我正在尝试从另一个视图控制器加载临时滑入视图。我的应用程序的视图控制器是结构化的:

Application > Tab Bar Controller > TabBarItem > View Controller

在这个视图控制器中,我有一个按钮,可以成功触发加载临时视图的方法:

- (IBAction)displayTimePickerViewForDayButton:(id)sender {

    NSLog(@"displayTimePickerViewForDayButton method entered.");

    // create the selector view controller and become the delegate
    WOTimePickerViewController *tpvc = [[WOTimePickerViewController alloc] initWithNibName:@"WOTimePickerView" bundle:nil];
    tpvc.delegate = self;
    tpvc.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

    [self presentModalViewController:tpvc animated:YES];
    [tpvc release];
}

我已经验证我的WOTimePickerViewController从init方法成功返回,但视图从未进入viewDidLoad方法。

因此,如果我查看IB中的视图,它似乎连接到vc的“view”属性。当我在模拟器(从IB)中运行视图时,它正确呈现。

当我从XCODE运行应用程序时,我可以导航到视图,单击我的按钮,并出现一个空白的白色屏幕(请注意,这不是应该加载的视图的白色背景)。

2 个答案:

答案 0 :(得分:4)

你应该这样做..

WOTimePickerViewController *tpvc = [[WOTimePickerViewController alloc] initWithNibName:@"WOTimePickerView" bundle:nil];
    tpvc.delegate = self;
UINavigationController *navCntrlr = [[UINavigationController alloc] initWithRootViewController:tpvc];
    navCntrlr.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

    [self.navigationController presentModalViewController:tpvc animated:YES];
    [tpvc release];

但是你缺少的重要一点是你做得不对。

你应该这样做:

[self.navigationController presentModalViewController:tpvc animated:YES];

当你想要解散modalView控制器时,你应该这样做:

[self.navigationController dismissModalViewControllerAnimated:YES];

答案 1 :(得分:1)

我认为视图控制器的modalTransitionStyle适用于来自视图控制器的模态视图。因此,如果要使用UIModalTransitionStyleCoverVertical转换来显示模态控制器,则应在父视图控制器(self)上设置modalTransitionStyle属性,而不是新视图。

我没有使用modalTransitionStyle的经验,但是在加载视图之前设置该属性会导致一些问题?我试着把它评论出来......

听起来IB中的所有内容都配置正确。只要您的文件所有者是视图控制器,并且它的视图出口绑定到视图就应该是好的。

希望有所帮助,