0

ViewController

  • UIWebView: webView- 単純な UIWebView
  • UIButton: aboutButton- AboutViewController に移動します

ViewControllerについて

  • UIButton: websiteButton- 接続済みclickWebsiteButton
  • IBAction: clickWebsiteButton- AboutViewController を閉じ、ロードhttp://websiteURL.com/しますwebView(ViewController 内にあります)。

ViewController コードについて

// AboutViewController.h

#import "ViewController.h"

@class ViewController;

@interface AboutViewController : UITableViewController <UIWebViewDelegate> {
    ViewController *viewController;
}


// AboutViewController.m

-(IBAction)clickWebsiteButton:(id)sender {
    [viewController.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://websiteURL.com/"]]];
    [self dismissModalViewControllerAnimated:YES];
}

質問

http://websiteURL.com/IBAction を介してビューを閉じると、UIWebView 内にロードできるようにしたいと考えています。現時点では、ビューを閉じるだけで、WebView 内に URL をロードすることはありません。WebView は機能しており、URL を適切にロードしています。別のビューからこの URL をロードする際に問題が発生しています。何か案は?

ありがとう

4

3 に答える 3

1

永続的なデータ ストレージに関する他の質問に回答しました。これは、viewControllers にデータを共有させる別の方法であるため、これはもう必要ないかもしれませんが、念のため...

問題は、提示されたviewController(aboutViewController)を閉じる前に、提示しているviewControllerでメソッドを呼び出していることです。非表示プロセスが完了した後に呼び出す必要があります。

この方法:

dismissModalViewControllerAnimated:

iOS6 では非推奨であり、iOS5 以降は代わりにこれを使用することをお勧めします

dismissViewControllerAnimated:completion:

wherecompletionはブロック引数を取ります。完了ブロックに配置したコードは、消去が完了した後に実行されます。ここで、提示側の viewController にメッセージを送信できます。

self.presentingViewControlleraboutViewController を提示した viewController への参照です。これは、提示プロセスの一部として iOS によって提供されます。ただし、終了プロセス中に null になるため、完了ブロックでは使用できないため、最初にローカル変数にコピーする必要があります。

aboutViewControllerで...

-(IBAction)clickWebsiteButton:(id)sender 
{
        //to use self.presentingViewController in the completion block
        //you must first copy it to a local variable 
        //as it is cleared by the dismissing process 

    UIViewController* presentingVC = self.presentingViewController;

    [self.presentingViewController dismissViewControllerAnimated:YES
                                     completion:
     ^{
         if ([presentingVC respondsToSelector:@selector(loadRequestWithString:)]) {
             [presentingVC performSelector:@selector(loadRequestWithString:) 
                                withObject:@"http://websiteURL.com/"];
         }
     }];
}

提示する viewController で、文字列引数を受け入れるメソッドを作成します。

- (void) loadRequestWithString:(NSString*)webString
{
    NSURL* requestURL = [NSURL URLWithString:webString];
    [self.webView loadRequest:[NSURLRequest requestWithURL:requestURL]];


}
于 2013-03-27T04:49:30.567 に答える
0

1 つのオプションは、デリゲート コールバックを使用することです。現在のコードでは、viewController のインスタントは nil です。ここにデリゲート パターンを実装する方法の例があります。

于 2013-03-27T01:36:46.167 に答える
-1

UINavigationController を使用している場合は、実行する必要があることに注意してください

UINavigationController *viewConNav = (UINavigationController *)self.presentingViewController;
YourVC *viewCon = (YourVC *)viewConNav.topViewController;
于 2013-07-17T13:05:10.913 に答える