Уверен, что это легко, но до сих пор не нашел ничего похожего в Интернете - еще одна причина полагать, что это не проблема.В любом случае!
Как я могу поместить UIButton
внутри UIView
и добавить UITapGestureRecognizer
к представлению, вызывающему функцию в этом представлении, в то же время выполняя кнопкудействие одновременно?
Что у меня есть:
- Нажатие внутри кнопки выполняет только действие кнопки.
- Нажатие за пределами кнопки выполняет только функцию просмотра.
Что я хочу:
- Нажатие внутри кнопки выполняет как действие кнопки, так и функцию просмотра.
- Нажатие за пределами кнопки выполняет только функцию просмотра.
ОБНОВЛЕНИЕ (код, который я использовал):
import UIKit
import AwesomeFramework
class View: UIView {
let button = UIButton()
let awesomeObject = AwesomeFramework.AwesomeObject()
@objc func a(_ sender: Any) {
// never gets called
print("a")
}
init() {
super.init(frame: .zero)
button.translatesAutoresizingMaskIntoConstraints = false
addSubview(button)
NSLayoutConstraint.activate([
button.centerXAnchor.constraint(equalTo: centerXAnchor),
button.centerYAnchor.constraint(equalTo: centerYAnchor),
button.widthAnchor.constraint(equalTo: widthAnchor),
button.heightAnchor.constraint(equalTo: heightAnchor),
])
button.addTarget(awesomeObject, action: #selector(awesomeAction), for: .touchUpInside) // awesomeAction prints "b"
let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(a(_:)))
addGestureRecognizer(gestureRecognizer)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Нажатие на кнопку, которую я хочу:
b
a
или
a
b
Я получаю:
b
ОБНОВЛЕНИЕ: приведен пример с некоторыми ограничениями, например:
- Кнопка запускает действие в структуре, к которой у меня нет доступа
- На самом деле есть много кнопок и других элементов, принимающих сигналы.Я не хочу использовать функцию a для всех из них (также я не могу, так как некоторые элементы управляют своими собственными распознавателями)