2

我希望用户在启动应用程序之前接受协议。所以在 appDelegate.m 我有以下内容:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    defaults = [NSUserDefaults standardUserDefaults];

    if(![defaults boolForKey:@"warningAccepted"]){
        UIAlertView *alert;
        alert = [[[UIAlertView alloc] initWithTitle:@"Warning" message:@"Message... To continue, select \"OK\". To close the app, select \"Cancel\"." delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil] autorelease];
        [alert show];
    }

    return YES;
}

- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex == 0){
        [defaults setBool:YES forKey:@"warningAccepted"];
        [defaults synchronize];

        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
            [window addSubview:mainNavController.view];
        } else {
            [window addSubview:tabBarController.view];
        }

        [window makeKeyAndVisible];
    } else {
        // Close App, User hit cancel.
        UIAlertView *alert;
        alert = [[[UIAlertView alloc] initWithTitle:@"App Cannot Continue" message:@"The application cannot run until warning is accepted." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil] autorelease];
        [alert show];
    }

}

一个问题是当用户点击取消时 else 永远不会被调用。另一个问题是我不确定如何阻止应用程序继续运行。根据我的发现,Apple 不希望您强制关闭应用程序。那是对的吗?我应该如何实施呢?感谢您所有的帮助。

4

4 回答 4

4

是的,如果您强行退出,Apple 将拒绝您的申请。我可以告诉 ;-) 另一个 UIAlertView 说用户如果不接受就不能继续应该把戏(只是不要在上面放任何按钮,这样用户就不能关闭它)

关于 else 范围,它没有通过它,还是 UIAlertView 不显示?用断点检查它。此外,不是什么时候(buttonIndex == 0)意味着用户触摸了“取消”按钮

于 2011-01-17T20:35:35.543 回答
2

我已经成功地使用了这个委托方法:

- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex

并确保您的应用程序使用 alertView 的 cancelButtonIndex 和 firstOtherButtonIndex 属性,以便您处理正确的按钮;我认为取消按钮目前通常索引为零,但这可能会改变。

于 2011-01-17T20:41:02.437 回答
1

处理 EULA 的推荐方法是在您将应用程序提交到 iTunes 时提交。这允许最终用户在下载您的应用程序之前阅读 EULA。

如果您想强制用户在使用应用程序之前接受 EULA,您应该将协议放入可以嵌入应用程序的 HTML 文件中。当您的应用启动时,在 UIWebView 中显示 HTML。(只需几行代码。)不要试图将其挤进警报中。

您不得“退出”应用程序。您可能希望在 web 视图中使用工具栏中的“接受”和“拒绝”选项或网页上的按钮来呈现 EULA。如果用户选择“拒绝”,那么您可能会弹出一个警报,要求您从他们的设备中删除该应用程序。这个想法是他们可以在 web 视图中滚动,但在他们点击接受之前不能继续。

我不确定 Apple 是否会允许这样做,这肯定会让您的最终用户感到沮丧。

于 2011-01-17T21:54:24.023 回答
0

对于第二个问题:是的,Apple 不想退出该应用程序。但是你可以做些什么来强迫用户自己退出应用程序:简单地显示一个空白屏幕。但我不确定苹果是否会允许这样做,因为它可以被视为“没有功能”。

于 2011-01-17T20:34:51.257 回答