Xcode 5 在带有 WebView 的新视图控制器中加载 URL

Posted

技术标签:

【中文标题】Xcode 5 在带有 WebView 的新视图控制器中加载 URL【英文标题】:Xcode 5 Loading a URL in a new View Controller with a WebView in it 【发布时间】:2013-10-09 16:17:46 【问题描述】:

似乎早期版本的 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];

【问题讨论】:

当然,我需要尽快上我的机器。 我添加一个答案,您需要设置好您的属性和您的第二个视图控制器的名称。 (我考虑为您的 URL 传递一个字符串,但您可以传递一个 URL 或其他)。 【参考方案1】:

在问题中的代码后编辑:

ViewController 中将您的代码替换为:

- (IBAction)requestButton:(id)sender

    BRWebView *web = [self.storyboard instantiateViewControllerWithIdentifier:@"BRWebView"];
    web.loadUrl = @"http://websitename.com";
    [self presentViewController:web animated:YES completion:nil];

并在 BRWebView.m 中删除 viewDidLoad 中的代码并添加 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];

【讨论】:

ViewControllerB *viewControllerB = (ViewControllerB *)navController.topViewController;目前,不确定具体情况。 我将根据您的问题代码编辑我的答案 好的...显然我仍然在创建 BRWebView 对象时遇到崩溃。 "NSInvalidArgumentException" "Storyboard 不包含标识符为 BRWebView 的视图控制器" 尝试更改以请求 Web 视图。我似乎把所有东西都正确连接起来了,不知道出了什么问题 您需要在情节提要中添加BRWebView 作为您的视图的标识符 好的是的!谢谢你。现在还有一件事。如何让我的导航控制器显示在该页面的顶部?【参考方案2】:

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

- (void)viewWillAppear:(BOOL)animated

    [super viewWillAppear:animated];

    if (self.loadUrl) 
        [self.requestWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.loadUrl]]];
    

【讨论】:

谢谢!这基本上就是我所需要的!【参考方案3】:

//网页视图的简单代码

- (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. 

【讨论】:

您能否在视觉上更好地格式化您的答案?

以上是关于Xcode 5 在带有 WebView 的新视图控制器中加载 URL的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 在另一个 ViewController 中打开 WebView

使用 Xcode 5 Storyboards 构建带有原型表视图单元的动态表视图

带有 iOS 7 的 Xcode 5 中的 NSInternalInconsistencyException:“故事板:容器视图中有意外的子视图。”

如何在我的 Xcode Swift 项目的不同导航堆栈中从一个视图控制器屏幕切换到另一个?

Xcode Webview 输出“空”

添加带有标签栏应用程序的初始视图(首页)(Xcode 3.2.5)[关闭]