在故事板中,VIEw Controller识别“TabVIEw”具有自定义类“Tabcolor”
TabRed *red = (TabRed *)[storyboard instantiateVIEwControllerWithIDentifIEr:@"TabVIEw"];TabBlue *blue = (TabBlue *)[storyboard instantiateVIEwControllerWithIDentifIEr:@"TabVIEw"];
然而,Tabcolor中的loadVIEw方法被调用,而不是TabRed / TabBlue.
此外,如果我nslog它的结果是一个Tabcolor对象:
NSLog(@"%@",red)
预期:TabRed
实际:Tabcolor
解决方法 TL;博士:故事板和xib包含序列化对象的集合.在故事板中指定类意味着在加载故事板时将获得该类的实例.获得您正在寻找的行为的一种方法是使用cocoa / cocoa-touch中常见的委托模式.
长版
故事板和类似的xib / nib文件实际上是编码对象的集合.当您在故事板中指定某个视图是UICustomcolorVIEwController时,该对象将表示为该类的实例的序列化副本.然后加载故事板并调用instantiateVIEwControllerWithIDentifIEr:时,将创建故事板中指定的类的实例并将其返回给您.在这一点上,你被困在你给的对象,但你没有运气.
由于看起来你想要做不同的事情,你可以构建你的视图控制器,以便使用委托由不同的类处理该功能.
创建协议以指定两个视图控制器之间要保持不同的功能.
@protocol ThingDoerProtocol <NSObject> -(voID) doThing;@end
将一个委托属性添加到vIEwcontroller:
@interface Tabcolor...@property (strong,nonatomic) thingDoerDelegate;
然后让您的新对象实现协议并执行您希望它们执行的 *** 作.
@implementation RedTabDoer -(voID) doThing { NSLog(@"RedTab"); }@end@implementation BlueTabDoer -(voID) doThing { NSLog(@"BlueTab"); }@end
然后在加载故事板时创建并连接这些对象.
Tabcolor *red = [storyboard instantiateVIEwControllerWithIDentifIEr:@"TabVIEw"];red.thingDoerDelegate = [[RedTabDoer new] autorelease];Tabcolor *blue = [storyboard instantiateVIEwControllerWithIDentifIEr:@"TabVIEw"];blue.thingDoerDelegate = [[BlueTabDoer new] autorelease];
这应该允许您通过更改分配给控制器委托槽的对象类型来自定义视图控制器的功能.
总结以上是内存溢出为你收集整理的objective-c – 在实例化时使用代码更改故事板中的自定义类全部内容,希望文章能够帮你解决objective-c – 在实例化时使用代码更改故事板中的自定义类所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)