iOS模板对话框通过storyboard UITabBarController

时间:2012-08-05 20:14:43

标签: objective-c ios5 storyboard xcode-storyboard

storyboard

我希望了解从A或B过渡到UITabBarController D(我的应用程序中的主界面)的“最佳”方式 - 有条件地通过C。

含义我希望以下所有内容都有效。

A -> C -> D
A -> B -> C -> D
A -> B -> D
A -> D

C是一个模态对话框,如果没有在个人资料中设置,则基本上会要求用户输入一条缺失的信息。

我试过了:

  1. 使用D - >的触发模态segue; C在D的viewDidLoad函数中:

    ([self performSegueWithIdentifier:@"ShowNumberDialog" sender:self];)
    
  2. 在viewDidLoad函数中以编程方式在C上显示C作为模态:

    (void)viewDidLoad
    {
        [super viewDidLoad];
    
        NSString *deviceNumber = [[UserModel sharedSingleton] deviceNumber];
        if ([deviceNumber isEqual:[NSNull null]]) {
    
            UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
            UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"NumberDialog"];
            [vc setModalPresentationStyle:UIModalPresentationFullScreen];
    
            NSLog(@"Showing device number dialog");
           [self presentModalViewController:vc animated:NO];
        }
    }
    
  3. 这些都没有,加上我所做的其他“hacky”尝试似乎都在起作用。所以我假设我不理解我应该这样做的基本方法。有人可以推荐一个更好的方法吗?

2 个答案:

答案 0 :(得分:1)

尝试将ViewDidLoad中的代码移至ViewDidAppear:(BOOL)animated。可能发生的情况是,您正在尝试将模式对话框推送到程序,同时仍然会发生到选项卡页面D的转换,这意味着应用程序忽略了打开模态对话框C的请求,因为它继续加载D. {{1当您的视图最终对用户可见并且已完全加载时,将调用此方法。

答案 1 :(得分:0)

所以基本上我不理解从D到C的“performSegue ...”。用户触发TabBar,所以他必须点击图标才能进入该控制器。

我会将C放在B和D之间。检查信息是否完整 - 如果没有 - > Se to C,否则D。

你看到这种方法存在问题吗?