【发布时间】:2021-02-19 19:21:39
【问题描述】:
我正在尝试在三个按钮操作上使用 switch 语句,用户可以在早上、下午和晚上时间之间进行选择。我想根据选择的按钮更改背景和文本颜色。
现在我的按钮没有根据点击而改变,我需要做什么才能让它工作?另外,在其中一种情况下,我如何使用标签 10 和标签 20?谢谢。
// 我的按钮
private lazy var morningButton: TimeButton = {
let button = TimeButton(type: .system)
button.setTitle("Morning", for: .normal)
button.titleLabel?.font = UIFont(name: "AvenirNext-Medium", size: 14)
return button
}()
private lazy var afternoonButton: TimeButton = {
let button = TimeButton(type: .system)
button.setTitle("Afternoon", for: .normal)
button.titleLabel?.font = UIFont(name: "AvenirNext-Medium", size: 14)
return button
}()
private lazy var eveningButton: TimeButton = {
let button = TimeButton(type: .system)
button.setTitle("Evening", for: .normal)
button.titleLabel?.font = UIFont(name: "AvenirNext-Medium", size: 14)
return button
}()
// 切换语句
@objc func timeButtonsTapped(_ sender: TimeButton) {
switch sender.tag {
case 10:
morningButton.backgroundColor = .darkPurpleTint
morningButton.setTitleColor(.white, for: .normal)
afternoonButton.backgroundColor = .white
afternoonButton.setTitleColor(.darkPurpleTint, for: .normal)
eveningButton.backgroundColor = .white
eveningButton.setTitleColor(.darkPurpleTint, for: .normal)
case 20:
afternoonButton.backgroundColor = .darkPurpleTint
afternoonButton.setTitleColor(.white, for: .normal)
morningButton.backgroundColor = .white
morningButton.setTitleColor(.darkPurpleTint, for: .normal)
eveningButton.backgroundColor = .white
eveningButton.setTitleColor(.darkPurpleTint, for: .normal)
case 30:
eveningButton.backgroundColor = .darkPurpleTint
eveningButton.setTitleColor(.white, for: .normal)
morningButton.backgroundColor = .white
morningButton.setTitleColor(.darkPurpleTint, for: .normal)
afternoonButton.backgroundColor = .white
afternoonButton.setTitleColor(.darkPurpleTint, for: .normal)
case 10 & 20:
morningButton.backgroundColor = .darkPurpleTint
morningButton.setTitleColor(.white, for: .normal)
afternoonButton.backgroundColor = .darkPurpleTint
afternoonButton.setTitleColor(.white, for: .normal)
eveningButton.backgroundColor = .white
eveningButton.setTitleColor(.darkPurpleTint, for: .normal)
case 10 & 30:
morningButton.backgroundColor = .darkPurpleTint
morningButton.setTitleColor(.white, for: .normal)
eveningButton.backgroundColor = .darkPurpleTint
eveningButton.setTitleColor(.white, for: .normal)
afternoonButton.backgroundColor = .white
afternoonButton.setTitleColor(.darkPurpleTint, for: .normal)
case 20 & 30:
afternoonButton.backgroundColor = .darkPurpleTint
afternoonButton.setTitleColor(.white, for: .normal)
eveningButton.backgroundColor = .darkPurpleTint
eveningButton.setTitleColor(.white, for: .normal)
morningButton.backgroundColor = .white
morningButton.setTitleColor(.darkPurpleTint, for: .normal)
case 10 & 20 & 30:
morningButton.backgroundColor = .darkPurpleTint
morningButton.setTitleColor(.white, for: .normal)
afternoonButton.backgroundColor = .darkPurpleTint
afternoonButton.setTitleColor(.white, for: .normal)
eveningButton.backgroundColor = .darkPurpleTint
eveningButton.setTitleColor(.white, for: .normal)
default:
morningButton.backgroundColor = .white
morningButton.setTitleColor(.darkPurpleTint, for: .normal)
afternoonButton.backgroundColor = .white
afternoonButton.setTitleColor(.darkPurpleTint, for: .normal)
eveningButton.backgroundColor = .white
eveningButton.setTitleColor(.darkPurpleTint, for: .normal)
}
}
// 我的功能
fileprivate func configureUI() {
morningButton.tag = 10
morningButton.isUserInteractionEnabled = true
afternoonButton.tag = 20
afternoonButton.isUserInteractionEnabled = true
eveningButton.tag = 30
eveningButton.isUserInteractionEnabled = true
morningButton.addTarget(self, action: #selector(timeButtonsTapped(_:)), for: .touchUpInside)
afternoonButton.addTarget(self, action: #selector(timeButtonsTapped(_:)), for: .touchUpInside)
eveningButton.addTarget(self, action: #selector(timeButtonsTapped(_:)), for: .touchUpInside)
}
【问题讨论】:
-
case 10 & 20是什么意思?timeButtonsTapped每按下一个按钮就会被调用一次,所以如果用户同时按下两个按钮,它会被调用两次。你要区分“同时按下 2 个按钮”和“一个接一个地按下 2 个按钮”吗? -
就像我希望上午和下午的按钮根据用户是否一个接一个地点击而改变。换句话说,如果点击上午和下午的按钮,则会有紫色背景和白色文字。
-
那么你就不需要将其他按钮的背景设置为每种情况下的白色(只需将所需的按钮背景设置为紫色),你只需要前3种情况。
-
好的,那么下一个问题是我的目标没有开火。我应该使用 UITapGestureRecognizers 吗?
标签: ios swift uibutton switch-statement