使用 prepareForSegue 传递 UIWebView 请求 [英] Pass a UIWebView request using prepareForSegue

查看:18
本文介绍了使用 prepareForSegue 传递 UIWebView 请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是 IOS 和 Objective C 的新手.场景是我有 2 个按钮,它们打开(使用 segue)2 个包含 UIWebview 的视图控制器.我认为使用 1 个 UIWebView 会更好,所以我尝试传递 webvew 的请求对象并仅使用一个 webview 控制器.

I 'm new to IOS and Objective C. The scenario is I have 2 buttons, which open (with segue) 2 view controllers containing a UIWebview. I thought is better to do it with 1 UIWebView so I tried to pass the request object of the webvew and use only one webview controller.

所以我得到了 wwwBtn(打开网站的 UIButton)和 fbBtn(转到 Facebook URL 的 UIButton)我的 viewController 和包含 UIWebView 的 wwwWebViewController.

so I got the wwwBtn (UIButton that opens a site) and fbBtn (UIButton that goes to a Facebook URL) my viewController and the wwwWebViewController which contains th UIWebView.

这是我的做法.

viewController.h 文件:

The viewController.h file :

@interface ViewController : UIViewController {
    UIButton *wwwBtn;
    UIButton *fbButton;
}
@property (retain, nonatomic) IBOutlet UIButton *wwwBtn;
@property (retain, nonatomic) IBOutlet UIButton *fbBtn;

ViewController.m 文件:

The ViewController.m file :

#import "ViewController.h"
#import "wwwWebViewController.h"

@implementation ViewController

@synthesize wwwBtn;
@synthesize fbBtn;

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{        
    if ([[segue identifier] isEqualToString:@"web"]) {
            NSString *urlstr=@"http ://www.google.com";
            wwwWebViewController *vc = [segue destinationViewController];
            vc.urlStr = urlstr;
        } else if ([[segue identifier] isEqualToString:@"fb"]) { 
            NSString *urlstr = @"http://www.facebook.com";
            wwwWebViewController *vc = [segue destinationViewController];
            vc.urlStr = urlstr;
        }
    }

wwwWebViewController.h 文件:

the wwwWebViewController.h file :

@interface wwwWebViewController : UIViewController {
    UIWebView *webView;
}

@property (retain, nonatomic) IBOutlet UIWebView *webView;

wwwWebViewController.m 文件:

The wwwWebViewController.m file :

    - (void)viewDidLoad
   {
        NSURL *url = [NSURL URLWithString:urlStr];
        NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
        [webView loadRequest:requestObj];
        [super viewDidLoad];
    }

推荐答案

执行以下操作,你将把这个类分配给你需要传递NSString *的目标UIViewControllersurlstr 给他们:

Do as the following, you will assign this class to the destination UIViewControllers that you will need to pass the NSString *urlstr to them:

WebViewController.h

WebViewController.h

@interface WebViewController : UIViewController {
    NSString *urlstr;
}

@property (strong, nonatomic) IBOutlet UIWebView *WebView;
@property (strong, nonatomic) NSString *urlstr;

WebViewController.m

WebViewController.m

@implementation WebViewController

@synthesize WebView;
@synthesize urlstr;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    NSURL *url = [NSURL URLWithString:urlstr];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
    [self.WebView loadRequest:requestObj];

}

现在是时候从我的主故事板类 InfoViewController 到目标类 WebViewController 创建两个 segue,在我的例子中,我创建了三个 segue,但只有两个使用 WebViewController 类.

Now it's time to create two segues from my main storyboard class InfoViewController to the destination class WebViewController, in my case I've created three segues but only two are using the WebViewController class.

您还必须为每个 segues 提供一个空间标识符,以便在主类 InfoViewController 中以编程方式定位它们.

You've also to give the segues a spacial Identifier for each to target them programmatically in the main class InfoViewController.

让我们看看 InfoViewController : UITableViewController 的样子:

let's check out how the InfoViewController : UITableViewController will look like:

InfoViewController.m

InfoViewController.m

#import "InfoViewController.h"
#import "WebViewController.h"

@interface InfoViewController ()

@end

@implementation InfoViewController

@synthesize AboutCell = _AboutCell;
@synthesize CGCell = _CGCell;
@synthesize FTACell = _FTACell;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *AboutCellClicked = [self.tableView cellForRowAtIndexPath:indexPath];
    UITableViewCell *CGCellClicked = [self.tableView cellForRowAtIndexPath:indexPath];
    UITableViewCell *FTACellClicked = [self.tableView cellForRowAtIndexPath:indexPath];

    if (AboutCellClicked == _AboutCell) {
        [self performSegueWithIdentifier:@"AboutPush" sender:self];
    } else if (CGCellClicked == _CGCell) {
        [self performSegueWithIdentifier:@"CGPush" sender:self];
    } else if (FTACellClicked == _FTACell) {
        [self performSegueWithIdentifier:@"FTAPush" sender:self];
    }

}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    WebViewController *webController = [[WebViewController alloc] init];

    if ([[segue identifier] isEqualToString:@"CGPush"]) {
        NSString *urlstr=@"http://www.google.com";
        webController = [segue destinationViewController];
        webController.urlstr = urlstr;
    } else if ([[segue identifier] isEqualToString:@"FTAPush"]) {
        NSString *urlstr=@"http://www.yahoo.com";
        webController = [segue destinationViewController];
        webController.urlstr = urlstr;
    }
}

@end

我希望这能解决您的问题,如果您有任何问题,请随时提问.

I hope this will solve your problem, If you have any question do not hesitate to ask.

这篇关于使用 prepareForSegue 传递 UIWebView 请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆