Как закрыть UIWebView, созданный программно? - PullRequest
8 голосов
/ 14 июля 2011

У меня есть следующий код для программного создания UIWebView и создания UIButton поверх него, чтобы закрыть его.С созданием все в порядке, но я не могу вернуться к созданному UIWebView, чтобы закрыть его с помощью кнопки!

UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[webView loadRequest:requestObj];
[self.view addSubview:webView];

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self 
           action:@selector(aMethod:)
 forControlEvents:UIControlEventTouchDown];
[button setTitle:@"Close" forState:UIControlStateNormal];
button.frame = CGRectMake(80, 210, 160, 40);
[button addTarget:self action:@selector(close:) forControlEvents:UIControlEventTouchUpInside];
[webView addSubview:button];

- (IBAction)close:(id)sender {
????
}

Заранее спасибо за помощь:)

Ответы [ 4 ]

14 голосов
/ 14 июля 2011

В ViewController.m

UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];

// tag will be used to get this webview later
webView.tag=55;
NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[webView loadRequest:requestObj];
[self.view addSubview:webView];

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self 
           action:@selector(close:)
 forControlEvents:UIControlEventTouchDown];
[button setTitle:@"Close" forState:UIControlStateNormal];
button.frame = CGRectMake(80, 210, 160, 40);
[button addTarget:self action:@selector(close:) forControlEvents:UIControlEventTouchUpInside];
[webView addSubview:button];





- (IBAction)close:(id)sender {

    [[self.view viewWithTag:55] removeFromSuperview];


}
0 голосов
/ 25 апреля 2015
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

    NSLog(@"%@",request.URL.absoluteString);
    NSString *absoluteUrl = [[request URL] absoluteString];
    if ([absoluteUrl isEqualToString:@"https://google.com/login?"]) {
        NSLog(@"move to another view or close the web view");
        [portfolioWebView removeFromSuperview];

        return NO;
    }

    return YES;
}
0 голосов
/ 14 июля 2011

Веб-представление - это суперпредставление кнопки, поэтому вы должны иметь возможность получить его так:

UIWebView * webView = [(UIButton *)sender superview];

Теперь вы можете сделать removeFromSuperview или что-то еще, чтобы оно исчезло.

Редактировать

- (IBAction)close:(id)sender {
    UIWebView * webView = [(UIButton *)sender superview];
    [webView removeFromSuperview];
}
0 голосов
/ 14 июля 2011

Держите ваш веб-вид как ивар вашего UIViewController.

Сейчас у вас есть локальная переменная для метода, поэтому вы не можете ссылаться на нее вне этого метода.Вместо этого объявите его в разделе интерфейса вашего файла .h, и вы сможете получить к нему доступ из всех методов класса.

И не забудьте выпустить его в вашем методе dealloc!

...