Передайте запрос UIWebView, используя prepareForSegue - PullRequest
1 голос
/ 09 января 2012

Я новичок в IOS и Цель C. Сценарий у меня есть 2 кнопки, которые открывают (с segue) 2 контроллера представления, содержащие UIWebview. Я подумал, что лучше сделать это с 1 UIWebView, поэтому я попытался передать объект запроса веб-страницы и использовать только один контроллер веб-просмотра.

поэтому я получил wwwBtn (UIButton, который открывает сайт) и fbBtn (UIButton, который идет по URL-адресу Facebook), мой viewController и wwwWebViewController, который содержит th UIWebView.

Вот как я это сделал.

Файл viewController.h:

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

Файл ViewController.m:

#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:

@interface wwwWebViewController : UIViewController {
    UIWebView *webView;
}

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

Файл wwwWebViewController.m:

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

1 Ответ

4 голосов
/ 05 декабря 2012

Сделайте следующее, вы назначите этот класс целевым UIViewControllers, которые вам понадобятся для передачи NSString * urlstr им:

WebViewController.h

@interface WebViewController : UIViewController {
    NSString *urlstr;
}

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

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, в моем случае я создал три сегментано только двое используют класс WebViewController.

enter image description here

Вы также должны задать для сегментов пространственный идентификатор для каждого из них, чтобы программно нацеливать их в главном классе InfoViewController.

давайте посмотрим, как будет выглядеть InfoViewController: UITableViewController:

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

Я надеюсь, что это решит вашу проблему. Если у вас есть какие-либо вопросы, не стесняйтесьспрашивайте.

...