1

我的应用程序中有此代码:

if (self.uiSwtichState == TRUE)
        {
            if ([CLLocationManager locationServicesEnabled])
            {
                [self.textString stringByAppendingString:[[[SMSLocationModel alloc] init] getLocation]];

            }
        }
            MFMessageComposeViewController *sms = [[MFMessageComposeViewController alloc] init];
sms.messageComposeDelegate = self;
sms.body = self.textString;
sms.recipients = self.arrayOfNumbers;
[self presentModalViewController:sms animated:YES];

这段代码被放入一个名为“send”的方法中。可以想象,getLocation方法获取当前用户位置,并且在应用程序第一次运行时,屏幕上会出现一个 UIAlertView,询问用户是否允许应用程序获取他的位置。问题是当这个 UIAlertView 出现时,她立即被短信 Vie 控制器 (MFMessageComposeViewController) 取代,这样用户就没有足够的时间在 UIAlertView 中回答“是”或“否”。

有一种方法可以等待用户按下 UIAlertView 中的按钮然后呈现 ModalViewController?

谢谢!

4

3 回答 3

1

您可以使用 CLLocationManagers 委托方法等到授权状态​​更改。如果您无权使用位置服务,请将 sms viewController 保存到实例变量中。然后请位置经理授权您。如果授权状态发生更改,则显示该视图控制器。

// somewhere else
self.locationManager.delegate = self;

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
    NSLog(@"New Authorization State: %d", status);
    if (self.viewControllerToPresentAfterLocationDidChange) {
        if (status == kCLAuthorizationStatusAuthorized) {
            // set location of viewController
            [self presentViewController:self.viewControllerToPresentAfterLocationDidChange animated:YES completion:NULL];
        }
        else {
            // user did not authorize you to use location services
        }
        self.viewControllerToPresentAfterLocationDidChange = nil;
    }
}


- (IBAction)buttonPressed:(id)sender {
    UIViewController *vc = [[UIViewController alloc] init];
    if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorized) {
        // authorized already, no alert will appear.

        // set location of vc
        [self presentViewController:vc animated:YES completion:NULL];
    }
    else if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined){
        self.viewControllerToPresentAfterLocationDidChange = vc;
        // access location so alert will show
    }
    else {
        // not authorized or restricted.
    }
}
于 2012-10-25T18:19:48.927 回答
-1

也许你可以使用这个委托:

- (void)didPresentAlertView:(UIAlertView *)alertView{
}

例如,初始化一个布尔值,它可以防止显示这个模态视图控制器。然后,如果关闭,则更改布尔值以允许呈现此视图控制器。

于 2012-10-25T17:44:17.377 回答
-1

是的,您可以实施AlertViewDelegate.
有关详细信息,请参阅UIAlertViewDelegate 文档

然后您可以使用该alertView:clickedButtonAtIndex:方法并MessageComposer在用户单击警报视图时显示您的。

于 2012-10-25T16:19:34.167 回答