0

ボタンを押してユーザーを Web ビューに移動させたいアプリがあります。ただし、押されたボタンに応じて特定のページをロードしたいと思います。当初、ボタンごとに個別の Web ビューを作成することを考えていましたが、それでは問題が増えるだけだったので、ここでは説明しません。だから私の質問は: 特定のボタンが押されたかどうかに基づいて、異なる URL を Web ビューにロードするにはどうすればよいですか?

メソッドを使用することprepareForSegueも考えましたが、それは物事を複雑にしすぎているのではないかと考えました。どの方向も素晴らしいでしょう。

4

4 に答える 4

4

そのため、内部に UIWebView を含む新しい viewController を作成する必要があります。newViewController で、url などの名前の NSString プロパティを作成します。

例:

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

oldViewController の buttonTouchUpInside イベントで

UIStoryboard *mainStorybroad = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    newViewController *webViewController = [mainStorybroad instantiateViewControllerWithIdentifier:@"webviewIdentifier"];
webViewController.url = @"url string";

最後に、 newViewController で次のことを行います。

[self.webView loadRequest:[NSURLRequest requestWithURL:url]];
于 2013-07-10T03:18:54.650 に答える
1

.h および .m ファイルのコードは次のとおりです。

XIB を作成し、その上に UIWebView を置き、クラスにバインドします。

ヘッダファイル用

#import <UIKit/UIKit.h>

@interface NewWebViewController : UIViewController<UIWebViewDelegate> {
    IBOutlet UIWebView *webView;
    NSString *currentURL;
    UIActivityIndicatorView *activityView;

}
@property (nonatomic, copy) NSString *currentURL;
@property (nonatomic, retain) UIActivityIndicatorView *activityView;

@end

実装ファイル (.m) の場合

#import "NewWebViewController.h"

@interface NewWebViewController ()

@end

@implementation NewWebViewController
@synthesize currentURL;
@synthesize activityView;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

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

    webView.frame = self.view.frame;
    [webView setScalesPageToFit:YES];
    NSURL *url = [NSURL URLWithString:self.currentURL];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
    [webView loadRequest:requestObj];


    self.activityView = [[[UIActivityIndicatorView alloc] init] autorelease];
    self.activityView.tag = 1;
    self.activityView.hidesWhenStopped = YES;
    UIView *customView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 44, 44)] autorelease];
    self.activityView.center = customView.center;
    [customView addSubview:self.activityView];
    self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:customView] autorelease];
    [self.activityView startAnimating];
}

#pragma mark UIWebView Delegate
- (void)webViewDidStartLoad:(UIWebView *)webView {
    [self.activityView startAnimating];
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    [self.activityView stopAnimating];
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
    NSLog(@"Error %@",[error description]);
    [self.activityView stopAnimating];
}

- (void)viewDidUnload
{

    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
    [webView stopLoading];
    webView.delegate = nil;
    webView = nil;
    self.activityView = nil;
    [super viewDidUnload];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    webView.frame = self.view.frame;
    return YES;//(interfaceOrientation == UIInterfaceOrientationPortrait);
} 

- (void) dealloc {
    [currentURL release];
    [webView release];
    [super dealloc];
}

@end

使い方はこちら

- (void) openWebViewControllerWithURL:(NSString*) url {
    if (!url) {
        return;
    }
    NewWebViewController *vController = [[NewWebViewController alloc] initWithNibName:@"NewWebViewController" bundle:nil];
    vController.currentURL = url;
    [self.navigationController pushViewController:vController animated:YES];
    [vController release];   
}

ボタンをクリックすると、ロードしたい URL を渡すだけです

このような

 [self openWebViewControllerWithURL:@"http://www.google.com"];
于 2013-07-10T03:15:02.030 に答える
1

View Controllerページへのモーダルトランジションを行うために、IBのボタンをリンクしてみませんか?次に、新しいView Controllerのviewdidloadで、コードは次のようになります。

    NSString *fullURL = @"google.com";
    NSURL *url = [NSURL URLWithString:fullURL];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
    [_webView loadRequest:requestObj];

ボタンは何個ありますか?ほんの数個の場合は、追加のビューコントローラーをいくつか作成します。それがたくさんある場合は、いつでもグローバル変数を作成し(すでにうんざりしているのが聞こえます...)、押されたボタンに応じて、変数を目的のURLに等しく設定できます。

于 2013-07-10T03:17:22.877 に答える
1

特定のボタンが押されたかどうかに基づいて、異なる URL を Web ビューにロードするにはどうすればよいですか?

異なるボタンを認識するための 2 つの基本的なアプローチがあります。

  • 個別のアクション:ボタンごとに個別のアクション メソッドを作成し、各ボタンを対応するアクションに接続するだけです。

  • 単一のアクション:すべてのボタンに対して単一のアクションを作成し、ボタンのいくつかのプロパティを使用してそれらを区別することができます。

最初のものは次のようになります。

- (IBAction)button1Action:(UIButton*)sender
{
    [self.webView loadRequest:[NSURLRequest requestWithURL:url1]];
}

- (IBAction)button2Action:(UIButton*)sender
{
    [self.webView loadRequest:[NSURLRequest requestWithURL:url2]];
}

2番目は次のようになります。

- (IBAction)buttonsAction:(UIButton*)sender
{
    switch (sender.tag) {
        case button1Tag:
            [self.webView loadRequest:[NSURLRequest requestWithURL:url1]];
            break;
        case button2Tag:
            [self.webView loadRequest:[NSURLRequest requestWithURL:url2]];
            break;
    }
}
于 2013-07-10T03:33:34.303 に答える