【问题标题】:iOS Modal dialog via storyboard UITabBarController通过情节提要 UITabBarController 的 iOS 模态对话框
【发布时间】:2012-08-02 22:02:24
【问题描述】:

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

意思是我希望以下所有内容都有效。

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

C 是一个模态对话框,如果用户没有在他们的个人资料中设置它,它基本上会询问用户缺少的信息。

我试过了:

  1. 在 D 的 viewDidLoad 函数中使用从 D -> C 触发的模态序列:

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

    (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];
        }
    }
    

这些,加上我所做的无数其他“hacky”尝试似乎都没有奏效。所以我假设我不了解我应该这样做的方式的基本内容。有人可以推荐一个更好的方法吗?

【问题讨论】:

    标签: objective-c ios5 storyboard xcode-storyboard


    【解决方案1】:

    尝试将ViewDidLoad 中的代码移动到ViewDidAppear:(BOOL)animated。可能发生的情况是,您正在尝试将模态对话框推送到程序中,而到选项卡页 D 的转换仍在发生,这意味着应用程序在继续加载 D 时忽略了您打开模态对话框 C 的请求。ViewDidAppear:(BOOL)animated当您的视图最终对用户可见并完全加载时调用。

    【讨论】:

    • 很高兴它成功了!如果你不这样做,你绝对应该检查 XCode 调试器的输出窗口。您会注意到类似“在推送另一个视图时无法推送视图”或类似内容的消息。有时输出窗口很有帮助!
    【解决方案2】:

    所以基本上我不明白从D到C的“performSegue...”。用户触发了一个TabBar,所以他必须点击图标才能来到这个控制器。

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

    您认为这种方法存在问题吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-27
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-09
      • 1970-01-01
      相关资源
      最近更新 更多