0

内部に UIWebView がある UIViewController を呼び出す UITableViewController を使用するアプリケーションがあります。テーブルセルをクリックするとUIViewControllerに移動し、内部の対応するWebURLが開きますが、UITableViewControllerに戻ってもWebサイトは閉じられません。それはウェブサイトをオフセットするので、テーブルビューに戻ったことはわかっていますが、ウェブサイトはまだ表示されています。私は何が欠けていますか?

WebViewController.m

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

}

-(void)viewDidAppear:(BOOL)animated {
webView2.delegate = self;
webView2.backgroundColor = [UIColor clearColor];
NSString *urlAddress = self.magURL;
webURL = [NSURL URLWithString:urlAddress];

requestObj = [NSURLRequest requestWithURL:webURL];
[webView2 loadRequest:requestObj];
}

-(void)viewDidDisappear:(BOOL)animated
{
webView2.delegate = nil;
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];

}

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}

- (void)webViewDidStartLoad:(UIWebView *)webView
{
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
}

TableViewController.m - (void)viewDidLoad { [super viewDidLoad];

magazineArray = [[NSMutableArray alloc] init];
[magazineArray addObject:@"Joyce Meyer"];
[magazineArray addObject:@"Perry Stone"];
[magazineArray addObject:@"Robb Thompson"];
[magazineArray addObject:@"R.W. Schambach"];
[magazineArray addObject:@"T.D. Jakes"];
[magazineArray addObject:@"Reinhard Bonnke"];
[magazineArray addObject:@"Pilot"];

self.navigationItem.title = @"Magazines";

magazineURL = [[NSMutableArray alloc] init];
[magazineURL addObject:@"http://mysolutionsmagazine.com/solutions/2013/magazine"];
[magazineURL addObject:@"http://google.com"];
[magazineURL addObject:@"http://smithmediagroup.com"];
[magazineURL addObject:@"http://smgvoices.com"];
[magazineURL addObject:@"http://facebook.com/smithmediagroup"];
[magazineURL addObject:@"http://twitter.com/smgvoices"];
[magazineURL addObject:@"http://youtube.com/smgvoices"];

MagazineURLViewController *urlController = [[MagazineURLViewController alloc] init];
urlController.urlHolder = newURLHolder;

}

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath     *)indexPath
{
newURLHolder = [magazineURL objectAtIndex:indexPath.row];
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(50, 100, 690, 750)];

NSURL *webURL2 = [NSURL URLWithString:newURLHolder];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:webURL2];

[webView loadRequest:requestObj];
[self.view addSubview:webView];

}


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

if ([[segue identifier] isEqualToString:@"Cell2"]){
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    newURLHolder = magazineURL[indexPath.row];
    [[segue destinationViewController]setMagURL:newURLHolder];

}
}
4

4 に答える 4

1

Webviewcontriller のビューを tableviewcontroller のビューにサブビューとして追加しています。何も問題がないように見えるかもしれませんが、Apple からの厳密なノーノーだと思います (iPad は例外です。使用できる splitviewcontroller があるためです)。

サブビューとして追加する場合、デフォルトのビューコントローラーメソッド (viewwill/didappear など) は呼び出されません。

それを新しいView Controllerとしてプッシュするか、モーダルに提示します。WebView Controllerをポップ/閉じると、すべてが正常に機能します。

モーダルにプッシュまたは表示したくない場合は、tableviewController で webview を使用し、webView のデリゲート メソッドを実装し、それをサブビューとして追加します。

于 2013-01-25T17:29:53.407 に答える
0

ストーリーボードを使用しているようです。問題は、の不要なコードにあるようです。

tableView:didSelectRowAtIndexPath:

現在のビューにWebビューを追加する必要はありません。そのコードを、ViewControllerに含める必要があります@"Cell2"

ほぼそこにいるようです。次のViewControllerにURLを渡しています。prepareForSegue

magURLプロパティを読み取り、そのWebページを表示する別のViewControllerが必要です。

テーブルビューコントローラでは、次のようなものがあります。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath     *)indexPath
{
  newURLHolder = [magazineURL objectAtIndex:indexPath.row];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
  if ([[segue identifier] isEqualToString:@"Cell2"]){
      [[segue destinationViewController] setMagURL:newURLHolder];
  }
}

次に、新しいViewControllerで

- (void)viewDidLoad
{
// if webview is created in the storyboard you won't need to `init` it here. Just use [self webView]
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(50, 100, 690, 750)];

NSURL *webURL2 = [NSURL URLWithString:[self magURL]];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:webURL2];

[webView loadRequest:requestObj];
[self.view addSubview:webView];
}
于 2013-01-25T16:58:38.950 に答える
0

現在、セル選択でUIWebViewを作成して現在のビューに追加するwebViewControllerを呼び出すことはないようです。だから私の質問はあなたがremoveFormSuperviewと言うことはありますか?

于 2013-01-25T16:58:36.837 に答える
0

サブビューとして Web ビューを追加する代わりに、Web ビューをプッシュします。

[self.navigationController pushViewController:webview animated:YES];

Web ビューを閉じたい場合:

[self.parentViewController.navigationController popViewControllerAnimated:YES];]
于 2013-01-25T16:44:18.177 に答える