iPhone:UIWebview在safari中打开超链接

iPhone:UIWebview在safari中打开超链接,iphone,objective-c,ios,uiwebview,Iphone,Objective C,Ios,Uiwebview,在我的应用程序中,我使用UIwebview,需要在其中超链接一些电话号码、电子邮件和URL。我做了以下操作: - (void)viewDidLoad { credits.delegate=self; } -(void)loadScreen { scroll=[[UIScrollView alloc]init]; credits=[[UIWebView alloc]init]; NSString *Address = @"www.***.com/php/

在我的应用程序中,我使用UIwebview,需要在其中超链接一些电话号码、电子邮件和URL。我做了以下操作:

 - (void)viewDidLoad
    {
        credits.delegate=self;
    }



-(void)loadScreen
{
scroll=[[UIScrollView alloc]init];
 credits=[[UIWebView alloc]init];

NSString *Address = @"www.***.com/php/getjson.php?method=";


    jmax = [NSURL URLWithString:Address];

    NSData *Data =[ NSData dataWithContentsOfURL:jmax];


    String = [[NSString alloc] initWithData:Data encoding:NSUTF8StringEncoding];

    NSString * creditsHtml = [NSString stringWithFormat:@" <font face=\"Arial\"><H3 align=\"center\"> Credits </H3> %@ <br>Phone%@</font>", String,phone];

    credits.userInteractionEnabled = YES;
    credits.frame=CGRectMake(10, (frame1.size.height + 564), 300, 100);
    credits.dataDetectorTypes=UIDataDetectorTypeAll;
    credits loadHTMLString:creditsHtml baseURL:nil];

[scroll addSubview:credits];
}



   -(BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType{


        NSString *urls=  jmaxString;

        NSURL *requestURL =[NSURL URLWithString: urls]; 
        if ( ( [ [ requestURL scheme ] isEqualToString: @"http" ] || [ [ requestURL scheme ] isEqualToString: @"https" ] || [ [ requestURL scheme ] isEqualToString: @"mailto" ] ) 
            && ( navigationType == UIWebViewNavigationTypeLinkClicked ) ) { 
            return ![ [ UIApplication sharedApplication ] openURL: requestURL ]; 
        } 

        return YES; 
    }

NSURL*requestURL=[request URL]中出现错误预期为
;在结尾
&
无关的“)”之前的“;”

这看起来像的副本

如果您的
-webView:shouldStartLoadWithRequest:navigationType:
方法根本没有被调用,那么连接您的代理时会出现问题——如果不查看您的更多工作,我们无法进一步诊断它。(确定没有调用它吗?在方法体的顶部粘贴一个NSLog,如果没有,则在调试器中放置一个断点。)


此外,在问题中发布该方法的主体时,为了简洁起见,您已经剥离了太多内容,或者传入的参数与您确定在Safari中打开哪些URL的逻辑之间没有联系。我想你的意思是测试用户点击的链接?这在
request
参数中。

您可以在loadScreen函数中分配/初始化UIWebView的新对象,而不设置其委托,因为您假设您在viewDidLoad中这样做了。。您必须在定义实例“credits”后设置委托。

只需在loadScreen方法中创建webview credits的位置下方粘贴这一行即可

credits=[[UIWebView alloc]init];
credits.delegate=self;   //Add this line

如果您将
openURL:requestURL
替换为
openURL:[requestURL URL]
,会发生什么情况?对不起,我忘了提到我的shouldStartLoadWithRequest:函数没有被调用请发布整个类好吗?我怀疑您忘了实现
UIWebViewDelegate
协议^No,我添加了uiwebDelegate和您的委托,你为什么不把它放在
-viewDidLoad
?为了方便起见,我添加了一些代码。我想打开我在Safari中点击的链接。请帮助…如果你的
-loadScreen
-viewDidLoad
之后被调用,然后,您的代理没有被连接——viewDidLoad将代理设置为
UIWebView
的一个实例(或者,如果此时
credits
为零,则可能不执行任何操作),然后您在loadScreen中创建另一个实例。除非您进行设置,否则新实例的委托为零。谢谢-webView:shouldStartLoadWithRequest:navigationType:被调用,但我知道我在那里定义的内容不正确。我从其他一些问题中找到了此代码,但在'request URL'NSURL*URL=[request URL]中出错;如果(UIWebViewNavigationTypeLinkClicked==navigationType){[[UIApplication sharedApplication]openURL:url];返回否;}只要返回否,以防用户单击行(UIWebViewNavigationTypeLinkClicked),这将使您的应用程序在safari中打开url。
credits=[[UIWebView alloc]init];
credits.delegate=self;   //Add this line