1

我希望能够基于JSON文件动态创建 ViewController。我的意思是,会有一个 json 来决定用户需要多少个 ViewController。也就是说,我有一个 json 文件,其中列出了 5 个 ViewControllers,我希望能够动态创建这些 ViewControllers 并能够在它们之间进行转换。

所以我将拥有的是JSON文件,它列出了 ViewControllers,比如这个例子中的 3。此 JSON 文件包含有关文本、按钮等以及如何在它们之间导航的信息。

所以我希望能够遍历这个JSON,并创建必要的视图控制器并添加所需的文本、按钮等。这JSON也将决定视图控制器如何链接在一起。

我知道如何创建一个 VC 并添加这样的信息(这只是一个简单的示例,刚刚创建了 vc 并添加了标签。

    UIViewController *vc = [[UIViewController alloc] init];
    vc.view.backgroundColor = [UIColor whiteColor];

    UILabel *testLabel =[[UILabel alloc] initWithFrame:CGRectMake(220, 50, 130, 80)];
    testLabel.backgroundColor = [UIColor clearColor];
    testLabel.textColor = [UIColor blackColor];
    testLabel.text = @"Hello";;

    [vc.view addSubview:testLabel ];
    [self.navigationController pushViewController:vc animated:YES];

我不知道如何使用 JSON 在循环中创建几个不同命名的 ViewController。有人对如何做到这一点有任何想法吗?或者这样的事情甚至可能吗?

任何帮助将不胜感激。

编辑:

JSON看起来像什么的非常基本的例子

{
   "ViewControllers":[
      {
         "name":"FirstVC",
         "id":1
      },
      {
         "name":"SecondVC",
         "id":2
      },
      {
         "name":"ThirdVC",
         "id":3
      }
   ]
}

所以第一个VC链接到secondVC,第二个链接到thirdVC

4

3 回答 3

2

只需创建一个数组并将它们保存在那里。像这样的东西:

NSMutableArray *viewControllers = [[NSMutableArray alloc] initWithCapacity:0];

// ...
// Inside a loop
UIViewController *vc = [[UIViewController alloc] init];
vc.view.backgroundColor = [UIColor whiteColor];

UILabel *testLabel =[[UILabel alloc] initWithFrame:CGRectMake(220, 50, 130, 80)];
testLabel.backgroundColor = [UIColor clearColor];
testLabel.textColor = [UIColor blackColor];
testLabel.text = @"Hello";

[viewControllers addObject:vc];
// Release vc and label if you're not using ARC

现在,如果你想命名你的控制器,一个想法是创建一个子类UIViewController并添加一个name(或类似的)属性。然后,您只需在循环内设置此属性,您就可以根据该属性引用/过滤。

于 2012-06-25T14:24:44.160 回答
1

您不会将它们显式命名为单独的变量,而是可能有一个不同 UIViewController 实例的 NSArray。当您阅读 JSON 文件时,您可以遍历显示的信息,创建一个视图控制器,并在每次 JSON 告诉您时将其添加到数组中。完成后,您可以在用户来回导航时将视图控制器拉出阵列。

你的 JSON 是什么样的?发布一个示例,我们也许可以提供更多信息。

于 2012-06-25T14:22:47.347 回答
1

为什么你的 ViewControllers 需要不同的名字?您应该简单地创建一个 viewController 类的实例。

例如,如果您有 3 个来自 JSON 的“屏幕”:

  1. 第二
  2. 关于

它们都有不同的按钮、文本等。你有一个类名 MyViewController。如果你想区分你的屏幕,这个类可能有一个@property 名称、@property 按钮(可能是 NSArray 和你的按钮管理类中的对象)等。

接下来,您应该将对象(MyViewController 类对象)存储在 NSArray 中。

所以当应用程序启动时你想做什么:你创建了一个 MyViewController 类的对象并显示它。如果用户想转到第二个屏幕,您应该简单地创建同一类的另一个实例。

因此,如果您想显示屏幕的名称,self.name您的 ViewController 类中有一个值。

于 2012-06-25T14:25:30.383 回答