【问题标题】:How to go about customizing UIButton如何自定义 UIButton
【发布时间】:2014-05-09 02:26:06
【问题描述】:

我正在尝试使用一个类别来自定义我的按钮,但我不希望我的项目中的所有按钮都使用这个类别。有没有办法让按钮知道它应该/不应该使用类别(比如某种 bool isUsingCategory)。如果没有,最好的方法是什么?我会将它子类化,但我听说子类化 UIButton 是个坏主意。有没有办法从某些对象中排除类别?谢谢!

编辑:我现在的工作是在我的控制器中运行一种特殊的方法来绘制按钮,但我不认为这很好地遵循了 MVC。

【问题讨论】:

  • 如果您只是自定义外观,您可以使用appearance 代理。但不幸的是,这将影响所有 UIButton 对象。区分的最好方法是子类。为什么这应该是不好的?
  • 哦,我想到了另一种方法。制作自定义 UIView 子类。我们称它为 MyButtonContainer。使您想要自定义 MyButtonContainer 的子视图的所有按钮,它本身可以是不可见的(清除),因此它不会影响任何事情。现在appearance 代理可以选择正确的按钮。
  • 嗯,这完全是波什(正如其中一位 cmets 所说)。如果你继承 UIButton,它就不是 UISystemButton。但这将是一个 UICustomButton,这到底有什么问题?
  • 无需担心所有实例都使用一个类别。该类别只是添加了将“self”理解为被扩展类的实例的方法。不调用这些方法就等于不使用分类。

标签: objective-c cocoa-touch model-view-controller uibutton objective-c-category


【解决方案1】:

您只需要从 UIButton 继承(例如 MyButton)并添加一个属性,如下所示:

@property (nonatomic, assign) BOOL useCategoryBehavior;

在 MyButton 的类别中,在重写方法中在做某事之前使用此属性。像这样:

- (void)viewDidLoad {
    [super viewDidLoad];
    if (useCategoryBehavior) {
        // do smth here
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 2017-03-05
    • 2011-10-31
    相关资源
    最近更新 更多