如何在XIB文件中设计自定义UIButton?

时间:2016-07-02 18:51:41

标签: ios uibutton xib

我正在尝试为Radio Button类创建自定义UIButton。选择后,按钮的背景颜色应为橙色,文本颜色为白色,未选中时,背景颜色应为白色,文本颜色为黑色。我能够通过在按钮的文本标签下添加彩色UIView以编程方式执行此操作,但我希望使用XIB文件执行此操作。但是,我不能为我的生活找到一个在XIB文件中设计UIButton的在线教程。有没有办法做到这一点?谁能告诉我如何或指向我的教程?

编辑:为清楚起见,我正在使用故事板。我不是在谈论整个视图控制器的xib文件。我正在谈论只为一个按钮制作一个XIB文件。这可能吗?

2 个答案:

答案 0 :(得分:2)

这有点老了。无论如何,这就是我在Xcode 10.1和Swift 4.2上设法做到的方式。

  1. 创建一个.xib文件,假设CustomButton.xib并在其中放入UIView contentView
  2. 创建一个.swift文件,并将其命名为CustomButton.swift
  3. 打开.swift文件并定义自定义类,如下所示:
import UIKit

class CustomButton: UIButton {

}
  1. 现在打开.xib并选择contentView,然后在Attributes Inspector中选择Size-> Freeform。这样,您可以在IB中操纵contentView的大小

  2. 重要。在身份检查器中,请勿将自定义类分配给contentView,即.xib的主视图。而是将其分配给文件的所有者

    enter image description here -----> enter image description here

    enter image description here -----> enter image description here

    (如果您选择了“从目标继承模块”,则将“模块”选择留给Xcode)

  3. 现在您应该可以在其类文件中 ctrl拖动 contentView,并有一个引用它的出口

  4. 如下所示在您的类中创建初始化程序。
@IBOutlet weak var contentView: UIView!

//  init used if the view is created programmatically
override init(frame: CGRect) {
    super.init(frame: frame)
    self.customInit()
}

//  init used if the view is created through IB
required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    self.customInit()
}

//  Do custom initialization here
private func customInit()
{
    Bundle.main.loadNibNamed("CustomButton", owner: self, options: nil)

    self.addSubview(self.contentView)
    self.contentView.frame = self.bounds
    self.contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
}

现在,您应该可以使用.xib设计CustomButton,并在任何需要的地方使用它。

答案 1 :(得分:-1)

  

我说的是只为一个按钮制作一个XIB文件

实际上有一种方法我还没有测试过,但我不认为它是Apple推荐的,因为当你添加一个新的按钮子类时,禁用创建新xib的选项

创建可重复使用按钮有两种选择取决于您想要放置按钮的实现位置:

  1. 通过IB /故事板设置按钮外观,只需将按钮复制到您需要的位置,甚至不需要您的子类http://imgur.com/ayki0Li

  2. 通过代码设置颜色(或其他外观)并将其连接到故事板上的按钮。除非您使用IBDesignable http://imgur.com/DJlGAoF

  3. ,否则此方法的缺点是您在xcode上看不到更改

    你绝对可以结合上述两种方法。通过界面构建​​器设置一些属性,然后通过- (void)awakeFromNib

    下的代码设置一些其他属性