【问题标题】:Decide Appearance Screen iOS决定外观屏幕 iOS
【发布时间】:2017-02-28 17:07:07
【问题描述】:

请参考下图:

我想在“VIEW 1”屏幕或“VIEW 2”屏幕上“直接”启动应用程序,而不是决定要显示 VIEW 屏幕的“START”屏幕的视觉外观。

    Eg.  in loadView() of STARTviewcontroller.m 

 if (some condition)
    {
    call "VIEW 1" screen
    }
    else
    {
    call "VIEW 2" screen
    } 

这是最好的方法吗? 我应该使用什么 segue / [self presentViewController: ...] ??

【问题讨论】:

  • 您可以在应用代理的didFinishLaunching 方法中执行此操作。但是,您将无法导航到 view1view2,因为您的 StartViewController 未嵌入在 UINavigationController 中。
  • 感谢@Adeel,它尝试了你所说的 [viewdidload of "VIEW" controller it called] ,但它打开了 "START" 视图,因为情节提要箭头指向 "START" 视图。
  • 你是对的。我建议的不是完整的解决方案。这是解决方案的一部分,如果没有它,您将无法实现您想要的。
  • 你能解释一下你想什么时候显示StartViewController吗?
  • 我希望使用 StartViewController 来决定使用哪个 VIEWcontroller... VIEW1 或 VIEW2..

标签: ios objective-c storyboard screen segue


【解决方案1】:

您需要分别为两个 viewController 设置 ID。 然后确定在 AppDelegate 级别呈现哪个 ViewController。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    if(someCondition)
    {
        UIViewController *yourController1= (UIViewController *)[mainStoryboard instantiateViewControllerWithIdentifier: @"viewController1Identifier"];
       [self.window.rootViewController presentViewController: yourController1animated:YES completion:nil];
    }else{
       //instantiate 2ndViewController
       `enter code here`
    }
}

【讨论】:

  • 谢谢@gontse,我按照你说的做了修改
  • - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil]; ViewController *yourController1= (ViewController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"view1"]; [self.window.rootViewController presentViewController:yourController1 动画:YES 完成:nil];返回是; }
  • 但它在箭头指向的视图控制器中打开,即在“开始”屏幕上..
  • @nikange_me:您可以在 StartViewController 类上实例化 viewController(1 或 2):ViewDidLoad 我认为这是实例化您的控制器然后将其作为子项添加到 startViewController 的最佳位置
【解决方案2】:

做一件事。

将“View1”控制器设置为情节提要中的初始视图控制器。

现在在 AppDelegate

didFinishLaunch
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

    BOOL showSecondViewController = YES;
    UIStoryboard *mainStoryBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

    if (showSecondViewController) {

        ViewController2 *objSecondViewController = [mainStoryBoard instantiateViewControllerWithIdentifier:@"ViewController2"];
        self.window.rootViewController = objSecondViewController;
        [self.window makeKeyAndVisible];


    } else {

        // It will show First view controller
    }
    return YES;
}

希望对你有帮助!

【讨论】:

    【解决方案3】:

    根据我们在 cmets 中的讨论,我可以理解的是,您根本不需要使用 StartViewController。首先在情节提要中将View1 设为您的Initial View Controller。然后在您的AppDelegate 中执行此操作。

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        BOOL someCondition;
    
        if (someCondition) {
    
            return YES;
        }
        else {
    
            UIWindow *keyWindow = application.keyWindow;
            UIStoryboard *storyboard = keyWindow.rootViewController.storyboard;
            ViewController2 *viewController2 = [storyboard instantiateViewControllerWithIdentifier:@"View2"];
            keyWindow.rootViewController = viewController2;
        }
    
        return YES;
    }
    

    【讨论】:

    • 您是否更改了情节提要中的Initial View Controller
    • 是的,我将 intialviewcontroller / 箭头指向“view2”,并尝试使用您发布的代码在应用程序委托中调用“view1”。
    • 使用断点,看看if语句是如何执行的。您如何查看someCondition
    • 到目前为止,我没有检查任何情况。在 didfinshlauchwithoption 中直接使用UIWindow *keyWindow = application.keyWindow; UIStoryboard *storyboard = keyWindow.rootViewController.storyboard; ViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"view1"]; keyWindow.rootViewController = viewController;
    • 在使用了一些断点之后,我了解到我们调用VIEWcontroller的代码首先被执行,然后是Initial View Controller的代码,它显示了'Initial View Controller'屏幕,
    猜你喜欢
    • 2013-02-06
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    相关资源
    最近更新 更多