【问题标题】:How to create a modal view , for application launch in iOS?如何创建模式视图,用于在 iOS 中启动应用程序?
【发布时间】:2013-02-19 15:59:51
【问题描述】:

我如何创建一个模态视图,也许可以从委托检查它是否是第一次启动应用程序并显示一个带有关闭按钮的模态视图,以便通知用户一些重要的事情?

我需要仅在应用程序第一次启动时显示视图,并且不再显示。

【问题讨论】:

  • 没什么,因为我不确定如何“设计这个”。我应该用我的味精创建一个视图,然后以某种方式仅第一次从委托中加载它吗?这是它的工作方式吗?
  • 标题质量很差

标签: ios modal-dialog modalviewcontroller


【解决方案1】:

首先:在这里查看我之前的答案:https://stackoverflow.com/a/13563490/1359306

这是一个密码保护模式视图,我每次打开应用程序时都会使用它。答案应该有助于解决实施解决方案时可能出现的一些问题。它使用performSegueWithIdentifier,就像我使用故事板一样,但您也可以使用presentViewController:animated:completion: 来展示您的视图。

那么:请注意,有一个 if 语句,您可以使用它检查是否需要呈现视图。就我而言,我检查用户是否离开应用程序超过 5 分钟。我通过在每次调用 applicationWillResignActive 时在 NSUserDefaults 中设置一个日期来执行此操作 - 并检查该日期与当前日期/时间之间的差异)。

在您的情况下,您可以执行以下操作:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"firsttime"] == nil) {
    //display modal view
    [defaults setObject:@"YES" forKey:@"firsttime"];
    [defaults synchronize];
}

这会检查应用程序的NSUserDefaults。如果 'firsttime' 为 nil(即首次下载应用程序时),我们将显示视图。然后我们将键设置为“YES”,这意味着它永远不会再等于 nil - 所以视图永远不会显示。

这对于在应用首次加载时显示说明很有用。或者,您可以存储日期或数字,以使代码在未来更具适应性。

NSUserDefaults 的文档可以在 here 找到。

【讨论】:

    【解决方案2】:

    您可以使用NSUserDefaults 实现此目的。

    在delegate.h文件中

    NSString * firstTime;
    

    在 .m 文件中

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
         self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
            // Override point for customization after application launch.
        self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
        self.window.rootViewController = self.viewController;
        [self.window makeKeyAndVisible];
    
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSString *myStr = [defaults objectForKey:@"str"];
        firstTime =myStr;
    
        if (firstTime.length==0) {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"hi" message:@"You have open this app first time" delegate:self cancelButtonTitle:@"ok" otherButtonTitles: nil];
            [alert show];
            [self firstTime];
        }
    
        return YES;
    }
    
    -(void)firstTime
    {
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSString *myStr = @"first";
        [defaults setObject:myStr forKey:@"str"];
        [defaults synchronize];
    }
    

    【讨论】:

      【解决方案3】:

      在您的AppDelegate 中使用didFinishLaunchingWithOptions 方法检查您的应用程序是第一次启动还是第二次像这样启动

      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
      {
          if ([[NSUserDefaults standardUserDefaults] boolForKey:@"firstTime"])
          {
              // show your main view controller
          }
          else
          { // your app is launching first time ....
      
            // show your modalview controller here and dismiss it & go to main view controller
      
      
            // don't forget to update the key so that next time user don't hang in else statement...
      
              [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"firstTime"];
              [[NSUserDefaults standardUserDefaults] synchronize];
      
          }
      }
      

      【讨论】:

        【解决方案4】:

        您可以在 UIViewController 类中使用presentViewController:animated:completion:

        这就是我要做的:

        1. 加载主视图控制器
        2. 检查您的用户偏好,看看您的“首次”键是否存在(在您看来,最有可能加载)
        3. 如果它不显示您的一次性视图
        4. 完成后(您可以通过将委托回调到主视图控制器来了解),将“firsttime”键保存到您的用户首选项中

        没有源代码,没有代码(我的 Mac 在家里),但是如果您按照这些简单的步骤操作,它应该可以正常工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-10-11
          • 2020-07-23
          • 2018-07-06
          • 2012-03-26
          • 2011-09-24
          • 2012-05-09
          • 1970-01-01
          相关资源
          最近更新 更多