【问题标题】:Unable to load new URL to UIWebView from another controller无法从另一个控制器将新 URL 加载到 UIWebView
【发布时间】:2013-12-23 07:03:30
【问题描述】:

我是 iOS 新手,我正在尝试制作一个带有侧边栏抽屉和简单导航的基于 webview 的应用程序(我正在使用 MFSideMenu 库)。我可以使用我的 webview 加载 URL:

ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UIWebViewDelegate>{
    UIWebView *webView;
}

@property (retain, nonatomic) IBOutlet UIWebView *webView;
- (IBAction)showLeftMenuPressed:(id)sender;
- (void) loadURL;
@property (nonatomic, strong) NSURL *url;

@end

ViewController.m

#import "ViewController.h"
#import "MFSideMenu.h"

@interface ViewController ()
- (void)webViewDidFinishLoad:(UIWebView *)webView;
@end

@implementation ViewController
@synthesize webView;
@synthesize url;

- (void)viewDidLoad
{
    [super viewDidLoad];
    webView.delegate=self;

    if(self.url == Nil) {
        NSString *myURL = @"http://google.com/";
        self.url = [NSURL URLWithString:myURL];
    }

    [self loadURL];
}

-(void)loadURL{
    NSLog(@"loadURL: %@", self.url);
    [self.webView loadRequest:[NSURLRequest requestWithURL:self.url]];
}

当我尝试使用以下代码加载新 URL 时,我收到了正确的 url 参数值。另一个控制器是一个侧边栏(抽屉)tableview,我在其中选择一个项目来更改主视图中显示的 URL(包含 webview 的 ViewController)。

另一个控制器:

ViewController *webViewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
NSString *urlString = @"http://kirk.kh.ua/";
NSString *encodedString=[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:encodedString];
webViewController.url = url;
//[self.navigationController pushViewController:webViewController animated:YES];
[webViewController loadURL];
[webViewController release];

您可能会注意到有一条注释行 - 我已经尝试过这个解决方案,但结果是一样的:当我在另一个控制器中调用代码时,ViewController 的 webview 没有任何反应,这很奇怪,因为在日志输出中我看到了调用了 loadURL 方法,它给了我一个正确的 URL (kirk.kh.ua)。


UPD:我注意到在第一次将 webview 作为对象加载时,它似乎为空(见日志):

UPD2:当我从另一个类调用 webivew 对象和其他合成对象时,我注意到它们为空,但是当我从 self (ViewController) 控制器记录它们时,这些对象存在并且可以访问。

谁能建议我如何从另一个类访问 ViewController 类对象?

【问题讨论】:

    标签: ios objective-c webview uiwebview mfslidemenu


    【解决方案1】:

    不要尝试从另一个控制器打开 URL - 在 ViewController 中创建一个 NSString 属性,然后当您点击一个单元格时,只需将 URL 作为字符串传递:

    ViewController *webViewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    webViewController.urlString = @"http://kirk.kh.ua/";
    

    然后在 ViewController 中添加类似这样的东西在viewWillAppear:

    if (![self.urlString isEqualToString:@""]) {
        NSString *encodedString=[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    
        NSURL *url = [NSURL URLWithString:encodedString];
        webViewController.url = url;
        [webViewController loadURL];
    }
    

    【讨论】:

    • 我已从传递 NSURL 对象更改为传递 url 字符串并按照您的建议添加了 viewWillAppear 代码,但没有结果:loadURL 记录正确的 URL 和 webview URL 没有改变。
    • 尝试使用 self.webView 而不是 webView。
    • 我已对问题信息添加了更新:webview 不会更改其 url,因为在第一次 loadrequest webview 为空之后,我不知道如何避免这种情况...
    • 然后不要释放它。删除这一行:[webViewController release];
    • 我试过了,但没有给出结果。我还检查了其他元素 - 我在与 webview 相同的页面上有导航项,并且当我调用 [webViewController loadURL]; 时它也记录为空。但同时,如果我单击 webview 内的 URL 并记录 webview 或导航项值,它会显示现有对象。所以 webview 不能从另一个控制器访问。你能帮我解决这个问题吗?
    猜你喜欢
    • 1970-01-01
    • 2013-09-25
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多