我希望能够基于JSON
文件动态创建ViewControllers。我的意思是,将有一个json将决定用户需要多少ViewControllers。即我说我有一个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在循环中创建几个不同名称的ViewControllers。任何人对如何做到这一点都有任何想法?或者这样的事情是否可能?
非常感谢任何协助。
编辑:
JSON的基本示例
{
"ViewControllers":[
{
"name":"FirstVC",
"id":1
},
{
"name":"SecondVC",
"id":2
},
{
"name":"ThirdVC",
"id":3
}
]
}
因此,第一个VC链接到secondVC,第二个VC链接到第三个VC
答案 0 :(得分: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
(或类似的东西)属性。然后你只需在循环中设置这个属性,你就可以根据该属性进行引用/过滤。
答案 1 :(得分:1)
您不会将它们显式地命名为单独的变量,而是您可能拥有不同UIViewController实例的NSArray。在阅读JSON文件时,您可以循环显示所显示的信息,创建视图控制器并在每次JSON告诉您时将其添加到数组中。完成后,您可以在用户来回导航时将视图控制器拉出阵列。
你的JSON是什么样的?发布示例,我们可以提供更多信息。
答案 2 :(得分:1)
为什么ViewControllers需要不同的名称?您应该只创建一个viewController类的实例。
例如,如果你有一个来自JSON的3“屏幕”:
所有这些都有不同的按钮,文本等。你有一个类名MyViewController。如果你想区分你的屏幕,这个类可能有一个@property名称,@ property按钮(可能是NSArray和你的按钮管理类中的对象)等。
接下来,您应该将对象(MyViewController类对象)存储在NSArray中。
那么在应用启动时您想要做什么: 您创建了MyViewController类的对象并显示它。如果用户想要进入第二个屏幕,您应该只创建同一个类的另一个实例。
因此,如果要显示屏幕名称,则ViewController类中的值为self.name
。