Кликабельное изображение как заголовок панели навигации в Swift - PullRequest
0 голосов
/ 29 октября 2018

Я просмотрел несколько обсуждений здесь:

  1. Установка изображения для заголовка
  2. Использование кнопки для заголовка

Однако я пытаюсь объединить два, то есть кликабельное изображение (кнопку) в качестве заголовка.

К сожалению, хотя приведенный ниже код компилируется, изображение не отображается при назначении в качестве кнопки. Есть предложения?

func addNavBarImage() {
    let navController = navigationController!

    let button =  UIButton(type: .custom)
    var image = UIImage(named: "textLogo")
    image = image?.withRenderingMode(.alwaysOriginal)

    let bannerWidth = navController.navigationBar.frame.size.width
    let bannerHeight = navController.navigationBar.frame.size.height

    let bannerX = bannerWidth / 2 - image!.size.width  / 2
    let bannerY = bannerHeight / 2 - image!.size.height / 2

    button.frame = CGRect(x: bannerX, y: bannerY, width: bannerWidth, height: bannerHeight)
    button.imageView?.contentMode = .scaleAspectFit
    button.imageView?.image = image

    button.addTarget(self, action: #selector(self.logoTapped), for: .touchUpInside)
    self.navigationItem.titleView = button
}

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Рабочий код для меня.

let button =  UIButton(type: .custom)
button.setImage(UIImage (named: "your_image"), for: .normal)
button.frame = CGRect(x: 0, y: 0, width: 100, height: 40)
button.backgroundColor = UIColor.clear
button.setTitle("Button", for: .normal)
button.addTarget(self, action: #selector(self.clickOnButton), for: .touchUpInside)
self.navigationItem.titleView = button

Здесь вы можете видеть, что в последней строке кнопка прямо установлена ​​на titleView навигационного элемента, который добавит кнопку в центр панели навигации.

Метод действия для кнопки ниже:

@objc func clickOnButton(button: UIButton) {
    print("Title Tapped")
}
0 голосов
/ 29 октября 2018

создать UIImageView, добавить его в качестве titleView и добавить UITapGestureRecognizer к вашему UIImageView

let imageView = UIImageView()
imageView.image = UIImage.named("yourImage")
// do any settings to your imageView
let titleTap = UITapGestureRecognizer(target: self, action: #selector(titlePressed))
self.navigationItem.titleView = imageView
self.navigationItem.titleView?.isUserInteractionEnabled = true
self.navigationItem.titleView?.addGestureRecognizer(titleTap)
...