我有一个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。
答案 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"];
}
}