HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 使用Interface Builder对类别进行子类化大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我多次读过我们不应该子组件(例如UIButton):

> Why shouldn’t I subclass a UIButton?
> Subclassing a UIButton

问题是当我使用Interface Builder时.
例如,我的很多视图中都有一个具有精确外观的按钮.我可以每次使用IB设置它们(这很痛苦),或者我可以使用自定义类来分解自定义行为和外观.

对我来说似乎有点矛盾的是,用IB简化流程的唯一方法就是按照每个人推荐的方式来做.

有更好的解决方案吗?我可以使用IB的类别吗?

谢谢.

解决方法

你提供的第二个链接非常清楚,这几乎是苹果本身所说的子类,但从不混淆内部结构.

最好的例子是iOS 7,现在情况完全不同了,例如,我正在维护的应用程序有一个子类UIControl,现在它在新的iOS上运行时遇到了麻烦,仅仅是因为它是内置的假设结构工作(迭代内部子视图替换一些东西).你可能不会拒绝你的应用程序,但是维持a **会很痛苦.

根据经验,你可以从外面对UIButton做任何事情,如下所示:

[myButton setBACkgroundImage:... forState:...];
[myButton setTextColor:... forState:...];
myButton.titleLabel.font = ...

您可以将其移动到自定义子类方法的内部:

+ (UIButton*)fancyPantsButton
{
    UIButton *button = [UIButton butonWithType:UIButtonTypeCustom];

    [myButton setBACkgroundImage:... forState:...];
    [myButton setTextColor:... forState:...];
    myButton.titleLabel.font = ...

    return button;
}

您也可以在init或awakeFromNib上执行此操作而不会出现问题(我通常更喜欢后者).

UIAppearence也是一种选择,正如用户hw731所建议的那样.无论你的船是什么漂浮,真的.

至于第二个问题,nib文件几乎创建了一个@L_197_15@,然后使用SETVALue填充它存储的东西:forKey:加载时(这就是为什么你得到一个错误,比如“类不符合键值)”你搞砸了一个笔尖),所以如果在加载笔尖时对某些东西进行了分类,那么是的,nibs尊重类别,因为它只是使用initWithCoder ..然后填补空白.

并且,出于同样的原因,nib文件将无法填充自定义属性,因为它不知道它们,除非您在IB中的“用户定义的运行时属性”中明确添加它们(iOS 5以后).

nibs的另一种技术是使用

@property (strong) IBOutletCollection(UIButton) NSArray *buttons;

然后相应地迭代和自定义按钮(通过子类,类别,本地方法,…).如果您只想要一些自定义按钮,但这个方法非常有用,但是不足以保证使用子类.

大佬总结

以上是大佬教程为你收集整理的ios – 使用Interface Builder对类别进行子类化全部内容,希望文章能够帮你解决ios – 使用Interface Builder对类别进行子类化所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。