创建UIViewController的多个实例

时间:2016-07-05 14:10:35

标签: ios objective-c uiviewcontroller uinavigationcontroller

在我的iOS应用中,标签项的数量无法修复。它将决定运行时间。假设有4个选项卡我将要显示,然后我将创建4个相同UIViewController运行时的实例(内部4个不同的导航控制器)。

以下是我们访问特定视图控制器的操作:

id controller1 = [self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];
[controller1 setTitle:@"Football"];
UINavigationController *nav1 = [[UINavigationController alloc] initWithRootViewController:controller1];
[arrControllers insertObject:nav1 atIndex:0];

我想要做的是让4个导航控制器实例具有相同视图控制器的实例。所有4个视图控制器都将具有相同的功能(一个将显示足球的视频,一个将显示篮球视频..)手段,在故事板中,MyViewController是一个视图控制器,但需要创建不同的实例MyViewController

我怎么能这样做?我必须这样做的唯一原因是,tabbar的标签不会被修复,那些将是动态的。

请分享任何有用的信息..

1 个答案:

答案 0 :(得分:1)

视图控制器一次只能包含一个其他视图控制器。即使情况并非如此,我怀疑您是否希望跨标签使用相同的实例,因为每次用户更改标签时,您都要承担更改状态的负担。 / p>

更简单的设置是创建具有唯一根的独特导航vcs,以响应来自服务器的数据,例如....

// you've figured out here that you need four tabs, based on
// a response from the server like...
NSArray *tabNames = @[ @"one", @"two", @"three" @"four"];  // from the server
NSArray *tabs = [@[] mutableCopy];
for (NSString *tabName in tabNames) {
    MyViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];
    vc.title = tabName;
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];
    [tabs addObject:nav];
}
// here, tabs is an array of view controllers that can
// be assigned to the tabBar viewControllers property