来自Storyboard的子类ViewController

我在Storyboard中创建了ViewController,我正在使用它

instantiateViewControllerWithIdentifier: 

加载它。 但我需要将此VC作为基类,并使用3-4个子类来更改其属性。

如何使用instantiateViewControllerWithIdentifier获取我的子类的instantiateViewControllerWithIdentifier

Swift 3中的 @Bhagyesh版本:

 class func instantiateFromSuperclassStoryboard() -> SubclassViewController { let stroryboard = UIStoryboard(name: "Main", bundle: nil) let controller = stroryboard.instantiateViewController(withIdentifier: "BaseViewController") object_setClass(controller, SubclassViewController.self) return controller as! SubclassViewController } 

您将不得不使用对象c运行时。 覆盖子类的init方法。 使用’instantiateViewControllerWithIdentifier’创建一个BaseViewController对象。 然后使用objc_setClass方法为创建的对象设置类。 以下代码将进入SubclassViewController.m。

  - (instancetype)init { UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"main" bundle:[NSBundle mainBundle]]; UIViewController *baseClassViewController = [storyboard instantiateViewControllerWithIdentifier:@"baseClassIdentifier"]; object_setClass(baseClassViewController, [SubclassViewController class]); return (SubclassViewController *)baseClassViewController; } 

在此之后,您可以使用简单的[[SubclassViewController alloc] init]创建SubclassViewController对象。

只是施展它。

 MyController *controller = (MyController *)[self.storyboard instantiateViewControllerWithIdentifier:@"myController"]; 

或斯威夫特:

 let controller = storyboard?.instantiateViewControllerWithIdentifier("myController") as! MyController