3

似乎早期版本的 Xcode 中的所有方法都不适合我。

我现在拥有的:
我有一个带有按钮的主菜单,该按钮可以进入另一个视图,其中包含一个带有 WebView 的不同控制器(有一个属性,因此可以设置要加载的 URL)

我想要什么:当我从该按钮加载该视图时,我想将一个字符串从第一个视图传递到表示 URL 的新视图并将其加载到 Web 视图中。基本上我想要一个通用的 WebView 视图,它可以加载与它相关的视图传递的不同 URL。

这是 WebView H 文件的代码

#import <UIKit/UIKit.h>

@interface BRWebView : UIViewController
{
    IBOutlet UIWebView *requestWebView;

}
@property (strong, nonatomic) NSString *loadUrl;

@end

在 MainMenu 的 ViewController 中,按钮侦听器有这个

-(IBAction)requestButton:(id)sender
{
    BRWebView *web = [self.storyboard    instantiateViewControllerWithIdentifier:@"BRWebView"];
    web.loadUrl = @"Websitename.com";
    [self presentModalViewController:web animated:YES];

}

在 BRWebView.m 文件中有这个

- (void)viewDidLoad
{

    [super viewDidLoad];

    NSURL *url = [NSURL URLWithString:_loadUrl];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [requestWebView loadRequest:request];
}
4

3 回答 3

6

在问题中的代码后编辑:

ViewController将您的代码替换为:

- (IBAction)requestButton:(id)sender
{
    BRWebView *web = [self.storyboard instantiateViewControllerWithIdentifier:@"BRWebView"];
    web.loadUrl = @"http://websitename.com";
    [self presentViewController:web animated:YES completion:nil];
}

并在viewDidLoadBRWebView.m中删除您的代码并添加viewWillAppear

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    // URL Request Object
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:[NSURL URLWithString:_loadUrl]];

    // Load the request in the UIWebView
    [_requestWebView loadRequest:requestObj];
}

旧答案:

您需要使用这样的属性传递您的 URL 数据(没有导航控制器)

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"showDetail"]) 
    {
        // Get reference to the destination view controller
        ViewControllerB *viewControllerB = segue.destinationViewController;

        // Pass URL
        viewControllerB.webviewURL = @"http://myurl.com";
    }
}

带导航控制器:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"showDetail"]) 
    {
        UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
        ViewControllerB *viewControllerB = (ViewControllerB *)navController.topViewController;

        // Pass URL
        viewControllerB.webviewURL = @"http://myurl.com";
    }
}

在你的第二个视图 .h

@property (nonatomic, strong) NSString *webviewURL;

第二个视图 .m

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    // URL Request Object
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:[NSURL URLWithString:_webviewURL]];

    // Load the request in the UIWebView
    [self.webView loadRequest:requestObj];
}
于 2013-10-09T16:32:33.247 回答
2

您应该在对目标视图控制器执行 segue 之前设置 URL(NSString) 属性,并在“viewWillAppear”回调中加载请求:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    if (self.loadUrl) {
        [self.requestWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.loadUrl]]];
    }
}
于 2013-10-09T16:40:37.057 回答
0

//网页视图的简单代码

- (void)viewDidLoad { 
    [super viewDidLoad]; // self.myWebView.delegate=self; 
    NSString   *urlString=@"http://www.google.com"; 
    NSURL *url=[NSURL URLWithString:urlString];
    NSURLRequest *obj=[NSURLRequest requestWithURL:url]; 
    [self.myWebView loadRequest:obj]; // Do any additional setup after loading the view, typically from a nib. 
}
于 2014-04-25T07:26:34.143 回答