#ios #objective-c #uiwebview #uibutton
#iOS #objective-c #uiwebview #uibutton
Вопрос:
Мне нужна помощь. У меня есть две кнопки, и мне нужна каждая кнопка, чтобы открыть другую веб-страницу в моем UIWebView (например: кнопка 1 открыть веб-сайт apple.com , кнопка 2 открыта google.com ). Я не могу найти ни одного руководства, которое помогло бы мне. Спасибо за помощь (я использую раскадровку).
Есть мой код, но что-то не так, потому что я вижу только черный экран (после нажатия на кнопку)
TabulkaViewController.m
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
myButton.frame = CGRectMake(10, 240, 300, 35);
[myButton setTitle:@"Buttonone" forState:UIControlStateNormal];
[myButton addTarget:self action:@selector(myButtonClick:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview: myButton];
}
-(void) myButtonClick:(NSString *)myString
{
NSURL *url = [NSURL URLWithString:@"http://www.apple.com/"];
WebViewController *viewWeb = [[WebViewController alloc] initWithURL:url andTitle:@"Apple"];
[self presentViewController:viewWeb animated:YES completion:nil];
}
WebViewController.h
#import <UIKit/UIKit.h>
@interface WebViewController : UIViewController <UIWebViewDelegate>
{
NSURL *theURL;
NSString *theTitle;
IBOutlet UINavigationItem *webTitle;
}
- (id)initWithURL:(NSURL *)url;
- (id)initWithURL:(NSURL *)url andTitle:(NSString *)string;
@property (strong, nonatomic) IBOutlet UIWebView *viewWeb;
@end
WebViewController.m
#import "WebViewController.h"
@implementation WebViewController
- (void)viewDidLoad
{
[super viewDidLoad];
webTitle.title = theTitle;
NSURLRequest *requestObject = [NSURLRequest requestWithURL:theURL];
[_viewWeb loadRequest:requestObject];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
- (id)initWithURL:(NSURL *)url andTitle:(NSString *)string {
if( self = [super init] ) {
theURL = url;
theTitle = string;
}
return self;
}
-(id)initWithURL:(NSURL *)url {
return [self initWithURL:url andTitle:nil];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
_viewWeb.delegate = nil;
[_viewWeb stopLoading];
}
@end
Комментарии:
1. Мне кажется, что вы на самом деле не добавляете webview в качестве subview где угодно? Вы загружаете запрос, но не отображаете его на экране.
2. Он, используя presentViewController:анимированный: завершение:
Ответ №1:
При работе с раскадровкой было бы полезно, если бы вы где-нибудь загрузили файл своего проекта.
Но, исходя из опыта, вам необходимо установить делегат WebView для вашего класса WebViewController
вы можете сделать это, добавив это в свой viewDidLoad:
self.webView.delegate = self;
затем вы должны реализовать вызов делегата shouldStartLoadWithRequest, это хорошее начало.
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
return YES;
}
дайте мне знать, если это исправит проблему.
РЕДАКТИРОВАТЬ: после проверки вашего проекта измените WebViewController-> viewDidLoad на это:
- (void)viewDidLoad
{
[super viewDidLoad];
// init webview
_viewWeb = [[UIWebView alloc] initWithFrame:self.view.frame];
_viewWeb.delegate = self;
// add it to this controller's view
[self.view addSubview:_viewWeb];
webTitle.title = theTitle;
NSURLRequest *requestObject = [NSURLRequest requestWithURL:theURL];
[self.viewWeb loadRequest:requestObject];
}
ваш _viewWeb не был инициализирован, как я подозревал, см. Мои Комментарии о том, как его инициализировать и как добавить его в ваш WebViewController
EDIT2: добавлены ограничения для полноэкранного просмотра веб-страниц, я рекомендую вам ознакомиться с автоматической компоновкой в документах Apple
- (void)viewDidLoad
{
[super viewDidLoad];
// init webview
_viewWeb = [[UIWebView alloc] initWithFrame:self.view.frame];
_viewWeb.delegate = self;
// add it to this controller's view
[self.view addSubview:_viewWeb];
// add constraints
NSDictionary* dict = @{@"viewWeb":_viewWeb};
_viewWeb.translatesAutoresizingMaskIntoConstraints = NO;
NSArray* constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[viewWeb]-0-|" options:0 metrics:nil views:dict];
[self.view addConstraints:constraints];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[viewWeb]-0-|" options:0 metrics:nil views:dict];
[self.view addConstraints:constraints];
webTitle.title = theTitle;
NSURLRequest *requestObject = [NSURLRequest requestWithURL:theURL];
[self.viewWeb loadRequest:requestObject];
}
Комментарии:
1. Когда я использую self.viewWeb = self; в WebViewController (в viewDidLoad), у меня появляется предупреждение: несовместимые типы указателей, присваиваемые UIWebView из WebViewController :/
2. извините, что я виноват, это должно быть: self.WebView.delegate = self, я отредактирую ответ
3. вы добавили _viewWeb в свой просмотр? просмотрите свой код WebViewController->viewDidLoad и убедитесь, что _viewWeb не равен нулю. Если вы можете загрузить свой проект куда-нибудь, я быстро посмотрю и посмотрю, что происходит.
4. Я могу отправить вам проект завтра, хорошо?
5. конечно, нет проблем, следуйте за мной в Twitter @mikeMTOL, и я отправлю вам свой адрес электронной почты.