Как обнаружить лонгпресс в BarButtonitem - PullRequest
1 голос
/ 09 марта 2020

У меня есть UIBarButtonItem в панели навигации. Когда пользователь щелкает по нему, он появляется в другом viewController. Теперь я хочу, чтобы, когда пользователь долго нажимал на эту кнопку (кнопка панели навигации), я хотел показать справочное сообщение. Мне нужна помощь для обнаружения событий onlick и longpress отдельно.

Ответы [ 3 ]

1 голос
/ 09 марта 2020

Вы должны создать кнопку и установить UITapGestureRecognizer & UILongPressGestureRecognizer на свою кнопку

// Create a button
let yourButton = UIButton()
yourButton.backgroundColor = .red
yourButton.setTitle("long press", for: .normal)

// Create a tap gesture recognizer
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(didTap))

// Create a long gesture recognizer
let longGesture = UILongPressGestureRecognizer(target: self, action: #selector(long))

// You can set minimum duration of the press action 
longGesture.minimumPressDuration = 3 //The default duration is 0.5 seconds.

// Add your gestures to button
yourButton.addGestureRecognizer(longGesture)
yourButton.addGestureRecognizer(tapGesture)

navigationItem.leftBarButtonItem = UIBarButtonItem(customView: yourButton)
@objc private func didTap() {
    print("Did Tap")
}

@objc private func long() {
    // You can show the help message in here
    print("Long press")
}
1 голос
/ 09 марта 2020

попробуйте это в виду didload:

let back = UIImage(named: "header_backarrow")
let backView = UIImageView(image: back)
backView.isUserInteractionEnabled = true
let tap = UITapGestureRecognizer(target: self, action: #selector(dismissManual))
backView.addGestureRecognizer(tap)
let backItem = UIBarButtonItem(customView: backView)
navigationItem.leftBarButtonItem = backItem
0 голосов
/ 03 апреля 2020

В viewDidAppear вашего контроллера представления вы можете добавить это:

let gestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(myCalledFunction))
(myUIBarButton.value(forKey: "view") as? UIView)?.addGestureRecognizer(gestureRecognizer)

Это сложно, потому что UIBarButton на самом деле не предоставляет свое представление, и поэтому вы не можете напрямую добавить к нему gestRecognizer.

Однако вы можете получить ссылку на его вид, используя метод value(forKey:), а затем поиграть с ним.

Не делайте этого в viewDidLoad, так как это необходимо для просмотра. уже созданы для того, чтобы это работало.

...