objective-c – 在实例化时使用代码更改故事板中的自定义类

objective-c – 在实例化时使用代码更改故事板中的自定义类,第1张

概述我有一个标签栏控制器和一堆相同的标签.每个选项卡的功能都不同,但UI都是相同的.在故事板中,我设计了一个选项卡的流和UI,并将其设置为基类.然后,当我创建选项卡时,我尝试对它们进行类型转换,然后将它们添加到选项卡栏,但它不起作用. 在故事板中,View Controller识别“TabView”具有自定义类“TabColor” TabRed *red = (TabRed *)[storyboard 我有一个标签栏控制器和一堆相同的标签.每个选项卡的功能都不同,但UI都是相同的.在故事板中,我设计了一个选项卡的流和UI,并将其设置为基类.然后,当我创建选项卡时,我尝试对它们进行类型转换,然后将它们添加到选项卡栏,但它不起作用.

在故事板中,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 – 在实例化时使用代码更改故事板中的自定义类所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1056953.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存