0
버튼 배열과 클로저 배열을 취하는 함수를 만들어야합니다. 결국 배열에서 액션을 각 버튼에 연결하고 알림에 각 버튼을 설정하려고합니다. 여기 제 기능입니다 :함수의 클로저 배열 매개 변수
func makeButtons(buttons: [UIButton], withActions actions: [() -> Void]){
var bottomAnchor: NSLayoutYAxisAnchor?
bottomAnchor = notificationView.bottomAnchor
buttons.forEach({ (button) in
button.actionHandle(controlEvent: .touchUpInside, action: actions[buttons.index(of: button)!])
notificationView.addSubview(button)
button.bottomAnchor.constraint(equalTo: bottomAnchor!, constant: -20).isActive = true
button.rightAnchor.constraint(equalTo: notificationView.rightAnchor, constant: -20).isActive = true
button.leftAnchor.constraint(equalTo: notificationView.leftAnchor, constant: 20).isActive = true
button.heightAnchor.constraint(equalToConstant: 40).isActive = true
bottomAnchor = button.topAnchor
})
}
내가 참으로 actionHandle를 사용하여있는 UIButton 대상에 대한 폐쇄를 추가 할 수 있도록 확장을 사용하고 있습니다(). 나는 그것을 쌓아 둔다. 여기에, 또한
extension UIButton {
private func actionHandleBlock(action:(() -> Void)? = nil) {
struct __ {
static var action :(() -> Void)?
}
if action != nil {
__.action = action
} else {
__.action?()
}
}
@objc private func triggerActionHandleBlock() {
self.actionHandleBlock()
}
func actionHandle(controlEvent control: UIControlEvents, action:@escaping() -> Void) {
self.actionHandleBlock(action: action)
self.addTarget(self, action: #selector(triggerActionHandleBlock), for: control)
}
}
을 나는 메이크업 버튼 기능을 사용하고 있습니다 방법은 다음과 같습니다 : 여기에 그입니다
func setButtonsWithAction(){
let button1 = UIButton()
let button2 = UIButton()
addButtons(buttons: [button1, button2], withActions: [self.sayHi, self.sayGoodbye])
}
func sayHi(){
print("Hi there")
}
func sayGoodbye(){
print("Goodbye")
}
모두 확인 설정, 내가 원하는대로. 그러나, 내가 직면하고있는 문제는 어떤 버튼을 클릭하든 관계없이 클로저 배열에서 마지막 기능을 수행한다는 것입니다. 따라서이 경우에는 어떤 버튼을 클릭하든 관계없이 "안녕"이 인쇄됩니다. 내가해야 할 것은 :
문제가 무엇인지click button1 -> print Hi
click button2 -> print Goodbye
,이를 알아낼 수 없습니다.
안녕하세요, 감사합니다. 나는 이미이 부분을 얻었다. 어떤 함수가 버튼 배열과 클로저 배열을 가져 와서 동일한 인덱스를 가진 버튼에 클로저를 모든 버튼에 하나씩 추가하는 것이 무엇이겠습니까 –