问题描述
||
根据Apple的文档,为了通过我的应用程序拨打电话,我需要实现以下协议:
HTML链接:
<a href=\"tel:1-408-555-5555\">1-408-555-5555</a>
本机应用程序URL字符串:
tel:1-408-555-5555
但是,在完成从UIWebView内的HTML链接发起的电话通话后,我被直接重定向回了我的应用程序。但是,在完成从本机应用程序URL字符串进行的电话呼叫后,我的iPhone仍停留在iPhone的常规电话应用程序中,如果要返回到我的应用程序,则必须手动执行此操作。
据我从阅读别人的讲话可以看出,没有办法改变这种行为。
这是我的问题:
确实是不可能的
在之后返回到应用程序
从本地人打个电话
应用程序URL字符串?
会有不利的一面吗
实现UIWebView而不是
在我遇到的情况下的UILabel
真的希望用户成为
重定向回我的应用程序
打完电话后?
解决方法
在使用“ 3” URL调用“ 2”和单击“ 4”中指向相同URL的链接之间,行为的确有所不同。
使用ѭ4代替UILabel可能会有一些缺点,但是您不必实际显示ѭ4来获得其
tel
URL处理行为。相反,只需在UIWebView实例中加载“ 7” URL请求,而不将其添加到视图层次结构中即可。
例如:
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface PhoneCaller : NSObject
{
@private
UIWebView *webview;
}
- (void)callTelURL:(NSURL *)url;
@end
@implementation
- (id)init
{
self = [super init];
if (self)
{
webview = [[UIWebView alloc] init];
}
return self;
}
- (void)callTelURL:(NSURL *)url
{
[webview loadRequest:[NSURLRequest requestWithURL:url]];
}
- (void)dealloc
{
[webview release];
[super dealloc];
}
@end
, 最简单的方法似乎是:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@\"telprompt:0123456789\"]];
通话结束后,您会收到提示,并且您的应用将重新获得关注。
, 请允许我简化一下。您需要的只是这个小片段:
UIWebView *callWebview = [[UIWebView alloc] init];
NSURL *telURL = [NSURL URLWithString:@\"tel:number-to-call\"];
[callWebview loadRequest:[NSURLRequest requestWithURL:telURL]];
我到了这里。
*最近在iOS 5.0上成功测试。
, Eric的Brotto方法仍可在5.1中使用。您必须在loadRequest之前将webview添加到主视图,如下所示:
NSString *cleanedString = [[phoneNumber componentsSeparatedByCharactersInSet:[[NSCharacterSet characterSetWithCharactersInString:@\"0123456789-+()\"] invertedSet]] componentsJoinedByString:@\"\"];
NSString *escapedPhoneNumber = [cleanedString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *telURL = [NSURL URLWithString:[NSString stringWithFormat:@\"tel://%@\",escapedPhoneNumber]];
UIWebView *mCallWebview = [[UIWebView alloc] init] ;
[self.view addSubview:mCallWebview];
[mCallWebview loadRequest:[NSURLRequest requestWithURL:telURL]];
(我添加了一个电话号码清理器,以删除任何阻止此方法的非数字字符)