電話をかけたいので、以下のコードを使用します。
- (void)callPhoneNumber:(NSString *)phoneNumber
{
UIWebView * webView2 = [[UIWebView alloc] init];
// Remove non-digits from phone number
phoneNumber = [[phoneNumber componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];
// Make a call
NSURL * url = [NSURL URLWithString:[NSString stringWithFormat:@"tel:%@", phoneNumber]];
[webView2 loadRequest:[NSURLRequest requestWithURL:url]];
[self.view addSubview:webView2];
}
電話をかける前に、ユーザーに を使用してオプションを選択するように求めますUIActionSheet
。ユーザーがオプションを選択すると、それに基づいて電話をかけます。
問題は、表示せずUIActionSheet
に直接電話をかけると、上記のコードが正常に機能することです。ユーザーに電話をかけることの確認を求めるアラートが表示されます。しかし、UIActionSheet
上記のメソッドを呼び出すと表示された後、確認アラートは表示されません。
奇妙なことは、この後 Xcode からアプリを停止すると、アプリが必要に応じてイオン バックグラウンドに配置されることです。しかし、デバイスのホーム画面にも確認アラートが表示されます。アプリではなく、デバイスのホーム画面にどのように表示されますか?
誰かが前にそれに直面したことがありますか?その理由は何ですか?
編集:私も以下のコードを試しました。しかし、同じ問題があります。上記の webview コードが機能するときはいつでも、以下のコードも機能します。動かない時も同様。
NSString *phoneNumberURL = [NSString stringWithFormat:@"telprompt:%@", phoneNumber];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumberURL]];
編集:アクションシートとデリゲートのコードを追加。
最初にアラートを表示します。アラートボタンを押すと、アクションシートが表示されます。そして、アクションシートからオプションを選択して電話をかけます。
# pragma mark - ALERT VIEW DELEGATE
- (void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if(alertView.tag == MY_TAG)
{
// Ask to select option
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Select Option" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Option1", @"Option2", nil];
actionSheet.actionSheetStyle = UIActionSheetStyleDefault;
[actionSheet showInView:self.view];
}
}
#pragma mark - UIActionSheet Methods
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
// If not pressed cancel button.i.e. selected one of the options
if (buttonIndex != actionSheet.cancelButtonIndex)
{
// Place a call
[self callPhoneNumber:@"1234567890"];
}
}