【问题标题】:Background color for subclassed UIButton?子类 UIButton 的背景颜色?
【发布时间】:2011-06-27 09:55:44
【问题描述】:

我有一个 UIButton 子类,我将其初始化为:

MyButton *button = [MyButton buttonWithType:UIButtonTypeCustom];

我想设置这个按钮的背景颜色。

如果我在创建按钮后在视图控制器中执行以下操作:

MyButton.backgroundColor = [UIColor ...];

它工作正常。但是,如果我尝试在 UIButton 子类中执行以下操作,无论是在 initWithFrame 还是在 DrawRect:

self.backgroundColor = [UIColor ...];

它什么也不做。按钮保持透明。

问题是,我的逻辑是,我确实需要在 UIButton 子类中设置颜色,而不是在调用代码中。

有什么想法吗?

【问题讨论】:

  • 在drawRect中,你调用了[super drawRect]吗?如果不尝试调用它,然后做其他事情。
  • 是的,我总是这样做 [super drawRect]。正如我所说,没有背景颜色。

标签: iphone xcode uibutton


【解决方案1】:

UIButton 不应该被子类化。它是一个类集群,你几乎肯定会弄错(它现在或将来可能会损坏)。基本方法 buttonWithType: 也永远不会返回您的类的实例,因此您需要竭尽全力让所有代码正常工作。

很多更好的方法是创建一个使用UIButton.buttonWithType: 的工厂方法,并按照您需要的方式配置按钮。

【讨论】:

  • 我们怎么知道呢?是否有任何苹果资源可以解释哪些 UI 元素可以子类化,哪些不能?
  • 因为 UIButton 上没有真正记录的 init 方法。不过,我们确实需要调用 init。最重要的属性是 buttonType,它是只读的 - 即它必须在创建期间设置。按钮的行为很大程度上取决于它。设置它的唯一方法是使用工厂方法“+buttonWithType:”实例化一个新按钮。不能保证你得到一个工作按钮 - UIButton 可能是一个有点抽象的类,没有办法找出来。子类化目前显然可以正常工作(作为“自定义”按钮),但它可能瞬间中断。
【解决方案2】:

你可以在你的子类中实现“Buttonwithtype”方法并在那里编写代码 self.backgroundColor = [UIColor 不管颜色];

它应该工作。告诉我。

【讨论】:

  • 是的,它成功了,谢谢。 (我不能只实现 buttonWithType,因为我需要颜色 - 使用属性为时已晚 - 所以我实现了 buttonWithType: andBackgroundColor: 并调用了 [super buttonWithType]。我仍然想知道简单的解决方案有什么问题。跨度>
  • 太棒了。可能是因为你写的哪个方法没有调用?如果这有帮助,那么您可以将其标记为答案吗?我是stackoverflow的新手,所以我得到了一些学分:)谢谢
猜你喜欢
  • 2011-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-22
  • 2021-11-04
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多