【问题标题】:How do I create a UIViewController programmatically?如何以编程方式创建 UIViewController?
【发布时间】:2011-02-10 22:22:49
【问题描述】:

我正在一个应用程序中工作,我在 UITableView 中有数据。它就像一个向下钻取应用程序。用户将单击一行并转到下一页,在UITableView 中显示更多记录。但就我而言,问题是我不知道用户最多可以钻多少级。级别的数量不是固定的。所以现在我正在考虑以编程方式创建和添加视图控制器。可能吗??如果是的话怎么办? 提前致谢。

【问题讨论】:

    标签: iphone uitableview uiviewcontroller


    【解决方案1】:
    UIViewController *controller = [[UIViewController alloc] init];
    controller.view = whateverViewYouHave;
    

    您有自己编写的视图控制器吗?在这种情况下,如果您使用的是在 IB 中设置的视图属性,您可能不需要设置它。当您拥有控制器后,您可以将其推送到 navigationController 或以模态方式查看它等。

    【讨论】:

    • 现在我在一个视图控制器上,想将用户引导到新的视图控制器并在表格视图中显示数据
    • 是的,用户还可以从这个以编程方式创建的新视图控制器进一步深入到下一个级别
    • 那么你可能希望你的第一个视图控制器是一个 UINavigationController。
    • 在以编程方式创建控制器时,通过覆盖 loadView 来懒惰地设置视图实际上更好。
    【解决方案2】:

    UIViewControllers 始终以编程方式创建。听起来您只需要为每个级别的视图控制器使用相同的类,例如:

    //CoolViewController:UITableViewController
    //CoolViewController.m
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
        if (!self.isAtTopLevel) {
            CoolViewController *cvc = [[CoolViewController alloc] initWithRecord:[self.records objectAtIndex:indexPath.row]];
            [self.navigationController pushViewController:cvc animated:YES];
            [cvc release];
        } else {
            //do something else
        }
    }
    

    在这种情况下,thingies 将是某种递归 NSArray(即数组的数组)。

    【讨论】:

    • 感谢 eman 的回答,在这个新的视图控制器中,我需要显示一个带有记录的 UITableview。我将如何做到这一点?
    • 是的,用户还可以从这个以编程方式创建的新视图控制器进一步深入到下一个级别
    • (更新示例)在此示例中,每个表视图控制器都有一个记录数组,每个记录都有一个子记录数组(如果我没有正确理解设计,请纠正我)。所以你可以有一个名为Record的类,它有一个名字(显示在表格单元格上)和一个NSArrayRecords——每个表格视图控制器都会显示子记录数组。跨度>
    • 根据您的最后评论,我将不得不从我的数据库中获取所有行并保存它。这是我不可能的,因为那样我最终会保存数十万行并且只使用其中的少数
    • @pankaj:根据您的描述很难知道您想要的设计。你能发布更多细节吗? (你在使用 Core Data 吗?)
    猜你喜欢
    • 2011-06-08
    • 2015-07-27
    • 1970-01-01
    • 2021-03-09
    • 2017-10-30
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多