我正在对我的应用程序进行现代化改造并更新
UIButton
以使用 UIButton.Configuration
。我将系统按钮切换为默认的简单配置样式,但惊讶地发现按钮突出显示状态几乎不明显。当您点击传统的系统按钮时,其 alpha 会降低很多以表明它被按下,因此很容易知道当您释放触摸时该按钮将被触发。不幸的是,使用普通按钮配置时,很难看到突出显示状态,因为外观几乎没有变化。有没有办法让这个突出显示像所有其他按钮(例如 UIBarButtonItem
s)一样?
let oldButton = UIButton(type: .system)
oldButton.setTitle("System Button", for: .normal)
oldButton.frame = CGRect(x: 50, y: 100, width: 150, height: 30)
view.addSubview(oldButton)
let newButton = UIButton(configuration: {
var config = UIButton.Configuration.plain()
config.title = "Plain Button"
return config
}())
newButton.frame = CGRect(x: 50, y: 150, width: 150, height: 30)
view.addSubview(newButton)
这是系统按钮的高亮状态:
这是普通按钮的高亮状态:
这就是
titleTextAttributesTransformer
的用途。使用它,您可以向运行时描述您想要在按钮的特定状态下执行的操作,例如当按钮突出显示时。示例:
let newButton = UIButton(configuration: {
var config = UIButton.Configuration.plain()
config.title = "Plain Button"
return config
}())
newButton.configuration?.titleTextAttributesTransformer = .init { [unowned newButton] container in
var newContainer = AttributeContainer()
guard let baseColor = container.uiKit.foregroundColor else {
return newContainer
}
switch newButton.state {
case .highlighted:
newContainer.foregroundColor = baseColor.withAlphaComponent(0.3)
default:
newContainer.foregroundColor = baseColor
}
return container.merging(newContainer)
}