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 が表示されると、すぐに sms 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

はい、実装できますAlertViewDelegate
詳細については、 UIAlertViewDelegate のドキュメントを参照してください。

次に、alertView:clickedButtonAtIndex:メソッドを使用しMessageComposerて、ユーザーがアラート ビューをクリックしたときに表示できます。

于 2012-10-25T16:19:34.167 に答える
-1

多分あなたはこのデリゲートを使うことができます:

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

たとえば、このモーダル ビュー コントローラーの表示を防ぐことができるブール値を初期化します。次に、却下された場合は、ブール値を変更して、このビュー コントローラーを表示できるようにします。

于 2012-10-25T17:44:17.377 に答える