web-dev-qa-db-fra.com

Créer UIWebView par programmation

J'essaie depuis un moment, mais je ne comprends pas.

J'ai écrit la fonction init suivante dans un fichier de support:

- (id)initWithFrame:(CGRect)frame
 {
    self = [super initWithFrame:frame];
    if (self) {
    webview=[[UIWebView alloc]initWithFrame:CGRectMake(0, 0, 1024,768)];
 }
    return self;
}

et suivant dans ViewController.m

- (void)viewDidLoad
{
   [super viewDidLoad];

   UIWebView *view = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)];
   NSString *url=@"http://www.google.com";
   NSURL *nsurl=[NSURL URLWithString:url];
   NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];
   [view loadRequest:nsrequest]; 
}

J'ai également essayé de créer la vue Web dans didFinishLaunchingWithOptions: méthode de appDelegate, mais cela n'a pas fonctionné non plus.

Quelle est la bonne façon?

21
user1153798

J'espère que cette solution vous aidera.

  1. Selon votre problème, ajoutez simplement ces lignes dans - (void)viewDidLoad
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)];
NSString *urlString = @"https://www.google.com";
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
webView loadRequest:request];
[self.view addSubview:webView];

J'ai utilisé le cadre statique de la webView, vous pouvez l'utiliser selon vos besoins.

  1. Mais UIWebView est obsolète: d'abord obsolète dans iOS 12.0 - N'est plus pris en charge; veuillez adopter WKWebView, donc le code mis à jour pour Objective C et Swift sont ci-dessous

Swift:

import WebKit

let theConfiguration = WKWebViewConfiguration()
let webView = WKWebView(frame: view.frame, configuration: theConfiguration)
let nsurl = URL(string: "https://www.google.com")
var nsrequest: URLRequest? = nil
if let nsurl = nsurl {
    nsrequest = URLRequest(url: nsurl)
}
if let nsrequest = nsrequest {
    webView.load(nsrequest)
}
view.addSubview(webView)

Objectif C:

#import <WebKit/WKWebView.h>
#import <WebKit/WKWebViewConfiguration.h>

WKWebViewConfiguration *theConfiguration = [[WKWebViewConfiguration alloc] init];
WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:theConfiguration];
NSURL *nsurl=[NSURL URLWithString:@"https://www.google.com"];
NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];
[webView loadRequest:nsrequest];
[self.view addSubview:webView];
35
Ashvin Ajadiya

Il semble que vous ayez oublié d'ajouter webview comme sous-vue de sa vue parent:

-(id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        webview=[[UIWebView alloc]initWithFrame:CGRectMake(0, 0, 1024,768)];
        [self addSubview:webview];
    }
    return self;
}

viewDidLoad n'est pas non plus le bon endroit pour créer des sous-vues. Vous devez exposer webview en tant que propriété de votre vue, puis y accéder à partir de viewDidLoad, comme ceci:

NSString *url=@"http://www.google.com";
NSURL *nsurl=[NSURL URLWithString:url];
NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];
[[self.view webview] loadRequest:nsrequest]; 
4
dasblinkenlight

Cette réponse est une légère amélioration par rapport à la réponse de @Ashvin Ajadiya. Pour définir dynamiquement la largeur et la hauteur de la vue Web en fonction de votre appareil, utilisez ce code à l'intérieur viewWillAppear sinon il n'obtiendra pas la largeur et la hauteur appropriées de l'appareil

-(void)viewWillAppear:(BOOL)animated
{
    UIWebView *webview=[[UIWebView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width,self.view.frame.size.height)];
    NSString *url=@"http://www.google.com";
    NSURL *nsurl=[NSURL URLWithString:url];
    NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];
    [webview loadRequest:nsrequest];
    [self.view addSubview:webview];
}
0
BharathRao
UIWebView *webView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 0, 320, 568)];
webView.delegate = self;   
NSString *url=@"http://www.google.com";
NSURL *nsurl=[NSURL URLWithString:url];
NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];
[webview loadRequest:nsrequest]; 
[self.view addSubview:webview];

Déclarez UIWebviewDelegate dans l'interface du viewcontroller

0
Muzahidul Islam