0

我是目标 C 和 XCode 4.2 的 iphone 开发新手。现在我成功地实例化了一个 UITableViewController,它可以遍历一个多级 json 数据树。但是,我在为叶页建立 UI 时遇到了麻烦。到目前为止,让我向您展示一段代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

        [tableView deselectRowAtIndexPath:indexPath animated:YES];
        int row = [indexPath row];
        NSString * currentrow = [NSString stringWithFormat:@"%d.",row];


        NSDictionary * item = [dataArray objectForKey:currentrow];
        NSDictionary * children = [item objectForKey:@"children"];
        if(children != nil)
        {
            uinavTableViewController *childView = [[uinavTableViewController alloc] init];
            childView.dataArray = children;
            [self.navigationController pushViewController:childView animated:YES]; 
        }
        else
        {
            uinavMenuItem * childView = [[uinavMenuItem alloc] init];
            //uinavSecondViewController * childView = [[uinavSecondViewController alloc] init];
            [self.navigationController pushViewController:childView animated:YES]; 
        }
}

所以 if 语句的第一部分将检查是否有子节点,如果有则创建另一个 uinavTableViewController。这部分工作完美。

else 语句使用 uinavMenuItem 创建一个叶页。当我在模拟器中运行它时,叶子页面只是一个黑屏。我查看了我的 NSLog,可以确认 uinavMenuItem viewDidLoad 确实被解雇了。所以控制器代码工作正常,但我只是不知道如何链接到我在情节提要中绘制的视图。

我做错了什么导致 uinavMenuItem 无法显示我在 storyboardD 中绘制的内容?

4

2 回答 2

2

当您想初始化在情节提要中制作的视图控制器时,请使用UIStoryboard's -instantiateViewControllerWithIdentifier. 您在情节提要中视图控制器的属性下定义此标识符。您的视图已加载但为空,因为它没有加载情节提要中的内容。它可能正在调用-loadView,因为它找不到一个。

在此处输入标识符:

在此处输入标识符

于 2012-04-30T01:36:27.357 回答
0

如果您使用的是故事板,则只需创建从 UITableViewController 到叶控制器的 segue 会更容易。您可以通过控制单击 table view 控制器然后将 push segue 拖到叶控制器来执行此操作。在 X-Code 侧边栏中,提供 segue 和标识符。

然后在您的代码中,[self.navigationController pushViewController]您可以使用:

if(children != nil)
{
    [self performSegueWithIdentifier: @"YourIdentifierHere" sender: self];
}
else
{ 
    [self [performSegueWithIdentifier: @"TheOtherIdentifier" sender: self];
}

要将数据传递给 uinavTableViewController,请使用prepareForSegue执行 segue 的同一控制器中的方法:

- (void)prepareForSegue: (UIStoryboardSegue *)segue sender: (id)sender
{
    // Because you have two segues, you need to check the identifier
    if ([[segue identifier] isEqualToString: @"YourIdentifierHere"])
    {
        uinavTableViewController childView = (uinavTableViewController *)segue.destinationViewController;
        childView.dataArray = children;
    }
}
于 2012-04-30T01:33:29.900 回答