我是 iOS 新手,我正在尝试制作一个带有侧边栏抽屉和简单导航的基于 webview 的应用程序(我正在使用 MFSideMenu 库)。我可以使用我的 webview 加载 URL:
视图控制器.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
视图控制器.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 对象和其他合成对象时它们为空,但是当我从自我(ViewController)控制器记录它们时,这些对象存在并且可以访问。
谁能建议我如何从另一个类访问 ViewController 类对象?