无法从另一个控制器加载新UI到UIWebView

时间:2013-12-23 07:03:31

标签: ios objective-c webview uiwebview mfslidemenu

我是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]];
}

当我尝试使用以下代码加载新网址时,我收到了正确的网址参数值。另一个控制器是侧边栏(抽屉)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作为对象时,它似乎为null(参见日志):

webview is null after first load

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

有人可以建议我如何从另一个类访问ViewController类对象?

1 个答案:

答案 0 :(得分:0)

而不是尝试从另一个控制器打开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];
}