无法使用 UIWebView 拨打电话
Posted
技术标签:
【中文标题】无法使用 UIWebView 拨打电话【英文标题】:Not able to make phone call using UIWebView 【发布时间】:2014-05-08 09:44:50 【问题描述】:我想使用UIWebView
拨打电话。我尝试了下面的代码,如果我简单地放置一个按钮并在按钮上单击执行下面的代码,它就可以正常工作。但目前在单击按钮时,我调用了一个 api,并在响应时执行下面的代码。
// Make a call to given phone number
- (void)callPhoneNumber:(NSString *)phoneNumber
if (!self.webView)
webView = [[UIWebView alloc] init];
[self.view addSubview:self.webView];
self.webView.delegate = self;
// Remove non-digits from phone number
phoneNumber = [[phoneNumber componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];
// Make a call
NSURL * url = [NSURL URLWithString:[NSString stringWithFormat:@"tel:%@", phoneNumber]];
[self.webView loadRequest:[NSURLRequest requestWithURL:url]];
它甚至没有调用 webview 委托方法。
可能是什么原因?
请注意,我只想使用 webview 调用,所以请不要建议使用原生联系人应用程序。使用 webview 可以在应用程序中保持流畅。通话结束时,用户仅在应用程序中。使用原生应用,如果用户想回到我的应用,用户必须手动打开应用。
【问题讨论】:
[NSURLRequest requestWithURL:url]
永远无法工作。
@Michael 为什么它永远无法工作?
看看我的回答。为什么要通过调用webview上的方法来拨打号码?它只是不能这样工作。
重复:***.com/questions/12065498/…
@Michael 它确实可以在其他控制器中使用。
【参考方案1】:
要拨打电话号码,您必须拨打-[UIApplication openURL:]
:
NSString *phoneNumber = @"+5512345678";
NSURL *phoneNumberURL = [NSURL URLWithString:[NSString stringWithFormat:@"tel://%@", phoneNumber]];
[[UIApplication sharedApplication] openURL:phoneNumberURL];
【讨论】:
【参考方案2】:为什么不用这个?
NSString *phoneNumberURL = [@"telprompt://" stringByAppendingString: phoneNumber];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumberURL]];
这会在通话结束后自动将用户带回应用程序。我希望这就是您想要使用 webview 实现的目标。
https://***.com/a/12065542/569497
【讨论】:
telprompt://
也不起作用。但是tel://
确实拨打了电话。但这不是我想要的,因为它不要求确认。【参考方案3】:
你确定self.webView
已经初始化了吗?
更改:webView = [[UIWebView alloc] init];
收件人:self.webView = [[UIWebView alloc] init];
这个:[NSString stringWithFormat:@"tel:phoneNumber"]
不起作用;试试:[NSString stringWithFormat:@"tel:%@",phoneNumber]
然而,就我个人而言,我从未尝试过以这种方式拨打电话。
【讨论】:
【参考方案4】:如果您想通过 UIWebView 调用,请使用以下示例:
+ (void)callWithString:(NSString *)phoneString
[self callWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel:%@",phoneString]]];
+ (void)callWithURL:(NSURL *)url
static UIWebView *webView = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
webView = [UIWebView new];
);
[webView loadRequest:[NSURLRequest requestWithURL:url]];
【讨论】:
以上是关于无法使用 UIWebView 拨打电话的主要内容,如果未能解决你的问题,请参考以下文章