【问题标题】:Extending a method applicable to all UIButtons扩展适用于所有 UIButtons 的方法
【发布时间】:2014-08-03 23:04:27
【问题描述】:

我的程序中有一个 UIButton 对象。 我想像下面这样使用它

myButton.setImage:blablabla
mybutton.title:.......blabla
...
...
myButton.placeTextBelowImageWithSpacing:12

在调用我的方法“placeTextBelowImageWithSpacing:12”时,它必须相应地设置图像和文本。我已经准备好了方法。上面的方法怎么使用呢。

PS:我讨厌子类化。 提前致谢

【问题讨论】:

  • 这真的是 Objective-C 吗?否则,请尝试Category

标签: ios objective-c ios7 uibutton


【解决方案1】:

你不能。这不是 Objective-C 中的有效语法。最接近的方法是在 UIButton 上显式声明遵循命名约定的新属性。然后使用它们看起来像:

myButton.setTitle = @"something"

然后您可以覆盖 setTitle 的设置器 (setSetTitle:),并使其调用 setTitle:forControlState:,我假设这是您的目标。

但这应该只能通过子类化来完成(学会喜欢它,它是 OOP 的重要组成部分),虽然如果你真的想要,你可以使用Objective-C 运行时objc_setAssociatedObject() 函数更多信息在这里:Objective-C: Property / instance variable in category

【讨论】:

    【解决方案2】:

    创建 UIButton 的自定义子类。我创建了一个名为 FinderButton 的按钮,它有一个图像和一个位于其下方的标题。效果很好。

    如果您讨厌子类化,那么您可能需要考虑换一种工作方式。

    成为讨厌子类化的 Objective C 程序员有点像讨厌血液的外科医生或讨厌泥土的农民。定义类层次结构是使用 Objective-C 等面向对象语言进行开发的主要工具之一。

    【讨论】:

    • 作为一个讨厌子类化的 Objective C 程序员有点像一个讨厌血液的外科医生 - 哇
    【解决方案3】:

    您可以通过创建 UIButton 类别来做到这一点:

    UIButton+MyCustomMethod.h

    @interface UIButton (MyCustomMethod)
    
    - (void)placeTextBelowImageWithSpacing;
    
    @end
    

    UIButton+MyCustomMethod.m

    @implementation UIButton (MyCustomMethod)
    
    - (void)placeTextBelowImageWithSpacing
    {
        // ...
    }
    
    @end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-23
      • 2013-09-21
      • 2015-12-17
      • 2019-09-23
      • 1970-01-01
      相关资源
      最近更新 更多