未显示UINavigationController堆栈顶部的UIWebView

时间:2012-03-02 19:25:18

标签: objective-c uiwebview navigationcontroller

我有一个UIViewController“PdfViewController”,其视图包含一个UIScrollView,它包含一个由storyboard设计的UIWebView。我正在使用带有ARC的Xcode 4.2中的故事板。 如果我启动PdfViewController作为初始ViewController,webview将按预期显示。 我希望PdfViewController从PDF列表中显示PDF。所以我创建了一个包含带有文档标题的TableViewController的NavigationController。 如果我尝试通过“tableView didSelectRowAtIndexPath”显示PdfViewController,则视图保持黑色并且不加载所选文档。 Xcode没有错误消息。

调用来自PdfViewController的viewDidLoad和viewWillAppear。

这里是PdfViewController的初始化

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    PdfViewController *pdfViewController = [[PdfViewController alloc]init];
    [pdfViewController setFileName:@"test"];
    [self.navigationController pushViewController:pdfViewController animated:YES]; 
}

- 看来,问题是PdfViewController本身并没有加载相应的nib。 如果我从TableViewCell创建一个seque,则正确加载PdfViewController。

我将代码更改为:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self.navigationController.viewControllers.lastObject setFileName:@"test"];
}

这里唯一要知道的是,在执行tableView didSelectRowAtIndexPath之前调用viewDidLoad和viewWillAppear,因此必须在viewDidAppear中加载PDF。

1 个答案:

答案 0 :(得分:1)

使用Xcode 4.2或更高版本,您可以通过segue在两个视图控制器之间传递数据。

请检查:

How to pass prepareForSegue: an object

您的代码可能如下所示:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
  NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
  if ([[segue identifier] isEqualToString:@"__YOUR_SEGUE_STRING__"]) {
     PdfViewController *pdfViewController = 
     (PdfViewController*)[segue destinationViewController];
    //
    // write your code here
    //
    [pdfViewController setFileName:@"test"];
  }
}