ios - 如何通过将类名传递给方法来创建子类 UIViewController?

标签 ios uiviewcontroller

我有 4 个子类 UIViewController,分别命名为 AViewController、BViewController、CViewController、DViewController。

现在在工具栏中,单击 A,内容 View 显示 AViewController 的 View ,...等等。

我是个懒人,讨厌写 4 次 "alloc]initwithnibname"的代码,所以我写了下面的代码在代码中创建它们。

- (void)addChildView:(UIViewController *)childViewController className:(NSString *)viewClassName{
if (childViewController != nil) {
    // add view
    [self.contentView addSubview:childViewController.view];
}else
{
    // init.
    Class v = NSClassFromString(viewClassName);
    UIViewController *childViewControllerNew = nil;
    childViewControllerNew = [[v alloc] initWithNibName:viewClassName bundle:nil];
    [self.contentView addSubview:childViewController.view];
}}

但这不会创建任何ViewController,调试时总是返回nil。

你能告诉我问题是什么吗?我可以通过这种方法创建子类 UIViewController 吗?

提前致谢!

最佳答案

问题是您正在创建一个 View Controller ,但是您没有对它做任何事情。有两个问题:

  1. 打字错误意味着您设置了错误的 View ([self.contentView addSubview:childViewController.view];)
  2. 您没有保留 childViewControllerNew

您应该将最后一段代码更改为:

Class v = NSClassFromString(viewClassName);
UIViewController *childViewControllerNew = nil;
childViewControllerNew = [[v alloc] initWithNibName:viewClassName bundle:nil];
[self.contentView addSubview:childViewControllerNew.view];

[self addChildViewController:childViewControllerNew];

关于ios - 如何通过将类名传递给方法来创建子类 UIViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17336232/

相关文章:

ios - 关闭 UIImagePickerController 时 UITabBar 消失

ios - View Controller 的过渡 - 从左到右

objective-c - 为什么我的 IBOutlet 标签中没有创建新行?

objective-c - 同一 UIView 对象的多个实例出现问题

ios - 如何从 CAKeyframeAnimation 获取当前动画步骤

iOS UIView过渡,不改变navigationbar

ios - TableView索引从rootcontroller到detailcontroller(UINavigationController)

ios - 在 iOS6 中,应用启动时 UIViewController 的 View 位置错误

ios - 在 UITextfield ios 中允许使用德语 UMLAUT 字符

ios - 如何通过 GeoFire 正确使用存储的搜索半径?