接受 1 个手指和 2 个手指点击事件的 UIButton
UIButton that accepts 1 finger and 2 finger tap events
我正在跟踪比赛得分,其中比赛得分 increment/decrement 25。
我正在使用 UIButton
s 在按钮标签中显示分数,用 1 个手指轻击手势将分数增加 25,用 2 个手指轻击手势减少分数到 25.
我找不到更模块化的方式来编写这段代码,每个按钮唯一可重复使用的功能是:
func setButtonTitleAndIncrement(index: Int, button: UIButton) -> Int {
var index = index
index += 25
button.setTitle(String(index), for: .normal)
return index
}
func setButtonTitleAndDecrement(index: Int, button: UIButton) -> Int {
var index = index
index -= 25
button.setTitle(String(index), for: .normal)
return index
}
但是对于每个按钮,除了指定特定的按钮和方法外,我必须使用相同的代码,但我想不出解决这个问题的方法。 我愿意接受一般 index
和 button
至少 。有什么想法吗?
var index1 = 0
var index2 = 0
override func viewDidLoad() {
super.viewDidLoad()
let oneFingerTapButtonTeam1 = UITapGestureRecognizer(target: self, action: #selector(incrementScoreTeam1))
oneFingerTapButtonTeam1.numberOfTouchesRequired = 1
buttonTeam1.addGestureRecognizer(oneFingerTapButtonTeam1)
let twoFingerTapButtonTeam1 = UITapGestureRecognizer(target: self, action: #selector(decrementScoreTeam1))
twoFingerTapButtonTeam1.numberOfTouchesRequired = 2
buttonTeam1.addGestureRecognizer(twoFingerTapButtonTeam1)
let oneFingerTapButtonTeam2 = UITapGestureRecognizer(target: self, action: #selector(incrementScoreTeam2))
oneFingerTapButtonTeam2.numberOfTouchesRequired = 1
buttonTeam2.addGestureRecognizer(oneFingerTapButtonTeam2)
let twoFingerTapButtonTeam2 = UITapGestureRecognizer(target: self, action: #selector(decrementScoreTeam2))
twoFingerTapButtonTeam2.numberOfTouchesRequired = 2
buttonTeam2.addGestureRecognizer(twoFingerTapButtonTeam2)
}
func incrementScoreTeam1() {
print("1 tapped")
let ind = setButtonTitleAndIncrement(index: index1, button: buttonTeam1)
index1 = ind
}
func incrementScoreTeam2() {
print("2 tapped")
let ind = setButtonTitleAndIncrement(index: index2, button: buttonTeam2)
index2 = ind
}
func decrementScoreTeam1() {
print("1 Two tapped")
let ind = setButtonTitleAndDecrement(index: index1, button: buttonTeam1)
index1 = ind
}
func decrementScoreTeam2() {
print("2 Two tapped")
let ind = setButtonTitleAndDecrement(index: index2, button: buttonTeam2)
index2 = ind
}
如何将 UIButton 子类化,然后将索引添加为按钮的 属性。
大致如下:
import UIKit
@IBDesignable class BaseButton: UIButton {
var index = 0
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
setup()
}
func setup() {
let oneFingerTapButtonTeam1 = UITapGestureRecognizer(target: self, action: #selector(incrementScoreTeam))
oneFingerTapButtonTeam1.numberOfTouchesRequired = 1
addGestureRecognizer(oneFingerTapButtonTeam1)
let twoFingerTapButtonTeam1 = UITapGestureRecognizer(target: self, action: #selector(decrementScoreTeam))
twoFingerTapButtonTeam1.numberOfTouchesRequired = 2
addGestureRecognizer(twoFingerTapButtonTeam1)
}
func incrementScoreTeam() {
let ind = setButtonTitleAndIncrement(index: index, button: self)
index = ind
}
func decrementScoreTeam() {
let ind = setButtonTitleAndDecrement(index: index, button: self)
index = ind
}
func setButtonTitleAndIncrement(index: Int, button: UIButton) -> Int {
var index = index
index += 25
button.setTitle(String(index), for: .normal)
return index
}
func setButtonTitleAndDecrement(index: Int, button: UIButton) -> Int {
var index = index
index -= 25
button.setTitle(String(index), for: .normal)
return index
}
}
我正在跟踪比赛得分,其中比赛得分 increment/decrement 25。
我正在使用 UIButton
s 在按钮标签中显示分数,用 1 个手指轻击手势将分数增加 25,用 2 个手指轻击手势减少分数到 25.
我找不到更模块化的方式来编写这段代码,每个按钮唯一可重复使用的功能是:
func setButtonTitleAndIncrement(index: Int, button: UIButton) -> Int {
var index = index
index += 25
button.setTitle(String(index), for: .normal)
return index
}
func setButtonTitleAndDecrement(index: Int, button: UIButton) -> Int {
var index = index
index -= 25
button.setTitle(String(index), for: .normal)
return index
}
但是对于每个按钮,除了指定特定的按钮和方法外,我必须使用相同的代码,但我想不出解决这个问题的方法。 我愿意接受一般 index
和 button
至少 。有什么想法吗?
var index1 = 0
var index2 = 0
override func viewDidLoad() {
super.viewDidLoad()
let oneFingerTapButtonTeam1 = UITapGestureRecognizer(target: self, action: #selector(incrementScoreTeam1))
oneFingerTapButtonTeam1.numberOfTouchesRequired = 1
buttonTeam1.addGestureRecognizer(oneFingerTapButtonTeam1)
let twoFingerTapButtonTeam1 = UITapGestureRecognizer(target: self, action: #selector(decrementScoreTeam1))
twoFingerTapButtonTeam1.numberOfTouchesRequired = 2
buttonTeam1.addGestureRecognizer(twoFingerTapButtonTeam1)
let oneFingerTapButtonTeam2 = UITapGestureRecognizer(target: self, action: #selector(incrementScoreTeam2))
oneFingerTapButtonTeam2.numberOfTouchesRequired = 1
buttonTeam2.addGestureRecognizer(oneFingerTapButtonTeam2)
let twoFingerTapButtonTeam2 = UITapGestureRecognizer(target: self, action: #selector(decrementScoreTeam2))
twoFingerTapButtonTeam2.numberOfTouchesRequired = 2
buttonTeam2.addGestureRecognizer(twoFingerTapButtonTeam2)
}
func incrementScoreTeam1() {
print("1 tapped")
let ind = setButtonTitleAndIncrement(index: index1, button: buttonTeam1)
index1 = ind
}
func incrementScoreTeam2() {
print("2 tapped")
let ind = setButtonTitleAndIncrement(index: index2, button: buttonTeam2)
index2 = ind
}
func decrementScoreTeam1() {
print("1 Two tapped")
let ind = setButtonTitleAndDecrement(index: index1, button: buttonTeam1)
index1 = ind
}
func decrementScoreTeam2() {
print("2 Two tapped")
let ind = setButtonTitleAndDecrement(index: index2, button: buttonTeam2)
index2 = ind
}
如何将 UIButton 子类化,然后将索引添加为按钮的 属性。 大致如下:
import UIKit
@IBDesignable class BaseButton: UIButton {
var index = 0
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
setup()
}
func setup() {
let oneFingerTapButtonTeam1 = UITapGestureRecognizer(target: self, action: #selector(incrementScoreTeam))
oneFingerTapButtonTeam1.numberOfTouchesRequired = 1
addGestureRecognizer(oneFingerTapButtonTeam1)
let twoFingerTapButtonTeam1 = UITapGestureRecognizer(target: self, action: #selector(decrementScoreTeam))
twoFingerTapButtonTeam1.numberOfTouchesRequired = 2
addGestureRecognizer(twoFingerTapButtonTeam1)
}
func incrementScoreTeam() {
let ind = setButtonTitleAndIncrement(index: index, button: self)
index = ind
}
func decrementScoreTeam() {
let ind = setButtonTitleAndDecrement(index: index, button: self)
index = ind
}
func setButtonTitleAndIncrement(index: Int, button: UIButton) -> Int {
var index = index
index += 25
button.setTitle(String(index), for: .normal)
return index
}
func setButtonTitleAndDecrement(index: Int, button: UIButton) -> Int {
var index = index
index -= 25
button.setTitle(String(index), for: .normal)
return index
}
}