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

Sam*_*yes 5 uibutton xib ios

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

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

Mar*_*tin 5

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

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

class CustomButton: UIButton {

}
Run Code Online (Sandbox Code Playgroud)
  1. 现在打开 .xib 并选择contentView,然后在属性检查器中选择 Size -> Freeform。这样你就可以操纵contentViewIB中的大小

  2. 重要的。在 Identity Inspector 中,不要将自定义类分配给contentView,即 .xib 的主视图。将其分配给文件的所有者

    在此输入图像描述----->在此输入图像描述

    在此输入图像描述----->在此输入图像描述

    (如果您选择了“从目标继承模块”,请将“模块”选择留给 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]
}
Run Code Online (Sandbox Code Playgroud)

现在您应该能够使用 .xib 设计您的 CustomButton 并在任何您想要的地方使用它。


小智 -3

我正在谈论仅为一键制作 XIB 文件

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

有两种创建可重用按钮的替代方法,具体取决于您想要放置按钮实现的位置:

  1. 通过 IB / Storyboard 设置按钮外观,然后将按钮复制到您需要的位置,您甚至不需要子类https://i.stack.imgur.com/e8gDC.jpg

  2. 通过代码设置颜色(或其他外观)并将其连接到故事板上的按钮。这种方法的缺点是你看不到 xcode 上的更改,除非你使用 IBDesignable https://i.stack.imgur.com/c064a.jpg

您绝对可以结合使用上述两种方法。通过界面生成器设置一些属性,然后通过下面的代码设置一些其他属性- (void)awakeFromNib