【发布时间】:2014-07-26 11:52:27
【问题描述】:
我是 iOS 开发新手。我的项目需要我创建一个带有左侧滑动抽屉的应用程序,它应该控制主视图,里面有一个 web 视图。
为了让它们相互交流,我创建了一个 KKYViewController 的委托。
@protocol KKYViewControllerDelegate <UIWebViewDelegate>
@end
@interface KKYViewController : UIViewController <UIWebViewDelegate,UIApplicationDelegate> {
id<KKYViewControllerDelegate> _delegate;
}
@property (nonatomic, strong) id delegate;
@property (nonatomic, retain)UIWebView* webView;
- (void)handleRefresh:(UIWebView *)webView;
@end
这是我的主视图控制器KKYViewController.m
@implementation KKYViewController
@synthesize webView = _webView;
- (void)viewWillAppear:(BOOL)animated {
self.webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
self.webView.delegate = self;
[self.view addSubview:_webView];
[self loadExamplePage:_webView url:@"http://www.google.com"];
}
- (void)loadExamplePage:(UIWebView*)webView url:(NSString*)strURL {
NSURL *url = [NSURL URLWithString:strURL];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
[webView loadRequest:urlRequest];
NSLog(@"LoadExamplePage!");
}
- (void)handleRefresh:(UIWebView *)webView {
NSString* strURL = @"http://www.github.com";
NSURL *url = [NSURL URLWithString:strURL];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:urlRequest];
NSString *theTitle=[self.webView stringByEvaluatingJavaScriptFromString:@"document.title"];
NSLog(@"title:%@",theTitle);
NSLog(@"ReloadPage!");
}
到目前为止,它运行良好,web 视图看起来很棒。然后我想使用另一个控制器的委托 KKYLeftSideDrawerControoler。这是一个表格,我想触摸其中一行以使 webview 跳转~ ~~
#import "KKYViewController.h"
@interface KKYLeftSideDrawerViewController : UIViewController <UITableViewDelegate,UITableViewDataSource,KKYViewControllerDelegate>
@end
然后是KKYLeftSideDrawerController.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
KKYViewController* webViewDelegate = [[KKYViewController alloc] init];
webViewDelegate.delegate = self;
switch (indexPath.row) {
case 0:{
UIAlertView* myAlert = [[UIAlertView alloc] initWithTitle:@"Login Successed!" message:@"~~~~" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK",nil];
[myAlert show];
break;
}
case 1:{ //Here I wanna use this to reload my webview to new url!
[webViewDelegate handleRefresh:webViewDelegate.webView];
NSLog(@"tend to reload");
break;
}
case 2:
break;
case 3:
break;
}
}
好吧,委托工作是因为当我按下 case 1 行时,我的控制台将记录我将它们放在 *- (void)handleRefresh:(UIWebView ) 中的信息网络视图。
问题来了:在-(void)handleRefresh中,我发现webview没有跳转,如你所见,我尝试记录它的标题,但结果为null~
我跟踪日志并发现我在 - (void)handleRefresh 中引用的 webView 是 nil。我曾经认为它与我在 *- (void)viewWillAppear 中加载的 webView 相同:(BOOL)动画 *.
这让我发疯了很长一段时间,只需要你的帮助,我会很感激的。
【问题讨论】:
-
如果您刚接触 iOS 1 周,请不要深入研究此类问题。你甚至还没有弄清楚基本的内存管理。
-
你说得对,所以我要去了解更多。但我想要一个解决方案,我也可以从中学到一些。有一天我回到这个可能会给我更多的帮助这个。谢谢!
标签: ios objective-c url webview uiwebview