#ios #objective-c #uiwebview
#iOS #objective-c #uiwebview
Вопрос:
Я хочу инициализировать UIWebview
объект внутри моего WebViewController
. У меня возникли небольшие проблемы с его инициализацией и направлением его на URL, который был отправлен ему из предыдущего ViewController
.
В viewDidLoad
моем WebViewController
случае я пытаюсь инициализировать его следующим образом:
UIWebView *tempWebview = [[UIWebView alloc]initWithFrame:theFrame];
NSURL *url = [NSURL URLWithString:_itemURL];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
self.myWebView = tempWebview;
[tempWebview loadRequest:urlRequest];
_myWebView.delegate=self;
[WebViewController loadRequest:urlRequest];
Однако это приводит к ошибкам, указывающим:
use of undeclared identifier'theFrame'
, и no known class method for selector loadRequest
.
Полный код приведен ниже:
WebViewController.h:
#import <UIKit/UIKit.h>
#import "MatchCenterViewController.h"
@interface WebViewController : UIViewController
@property (strong, nonatomic) NSURL *itemURL;
@property (weak, nonatomic) IBOutlet UIWebView *myWebView;
@end
WebViewController.m:
#import "WebViewController.h"
@interface WebViewController ()
@end
@implementation WebViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
UIWebView *tempWebview = [[UIWebView alloc]initWithFrame:theFrame];
NSURL *url = [NSURL URLWithString:_itemURL];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
self.myWebView = tempWebview;
[tempWebview loadRequest:urlRequest];
_myWebView.delegate=self;
[WebViewController loadRequest:urlRequest];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end
Комментарии:
1. Где вы инициализируете
theFrame
? Устанавливается_itemURL
правильно? Вы пытаетесь вызватьloadRequest
, который является методом экземпляра onUIWebViews
, как метод класса onWebViewController
, который является подклассомUIViewController
. Почему?
Ответ №1:
Сначала вам нужно определить, что вы собираетесь использовать делегат UIWebView в вашем файле .h как:
@interface WebViewController : UIViewController <UIWebViewDelegate>
Если у вас уже есть WebView, определенный в вашем Xib-файле, зачем вы создаете другой UIWebView и назначаете его WebView IBOutlet? Вы могли бы просто сделать:
self.myWebView.delegate = self; //Note that I have set the delegate first before calling LoadRequest
NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.myWebView setScalesPageToFit:YES];
[self.myWebView loadRequest:request];