Как добавить UIImageView на панель навигации в Swift? - PullRequest
0 голосов
/ 20 июня 2019

У меня есть этот код, который добавляет округленную границу вокруг UIImage с использованием UIImageView, и я использовал UITapGestureRecognizer, чтобы позволить пользователю нажать на кнопку:

var profilePicture = UIImageView()
func setupUserProfileButton() {

    let defaultPicture = UIImage(named: "profilePictureSmall")
    profilePicture = UIImageView(image: defaultPicture)
    profilePicture.layer.cornerRadius = profilePicture.frame.width / 2
    profilePicture.clipsToBounds = true
    profilePicture.layer.borderColor = UIColor.black.cgColor
    profilePicture.layer.borderWidth = 1

    // Letting users click on the image
    profilePicture.isUserInteractionEnabled = true
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(profilePictureTapped))
    profilePicture.addGestureRecognizer(tapGesture)

}

Как добавить это в левую часть панели навигации? Является ли это возможным? И я не думаю, что жест касания необходим, если я могу добавить ImageView на панель навигации как barButtonItem, так что вы можете игнорировать это. Я вроде нашел несколько похожих вопросов, но они были в объективе C, и ничего из того, что я пробовал, не сработало.

Вот что я придумал, основываясь на ответе:

import UIKit
import Firebase

class CreateStoryPage: BaseAndExtensions {

    let userProfileButton = UIButton(type: .custom)

    override func viewDidLoad() {
        super.viewDidLoad()

        // Call all the elements
        setupUserProfileButton()

    }
    // MARK:- Setups
    // Setup the user profile button
    func setupUserProfileButton() {

        userProfileButton.setImage(#imageLiteral(resourceName: "profilePictureSmall.png"), for: .normal)
        userProfileButton.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
        userProfileButton.addTarget(self, action: #selector(profilePictureTapped), for: .touchUpInside)

        let userProfileView = UIView(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
        userProfileView.layer.cornerRadius = 14
        userProfileView.backgroundColor = .red

        userProfileView.addSubview(userProfileButton)

        let leftNavBarItem = UIBarButtonItem(customView: userProfileView)
        self.navigationItem.setLeftBarButton(leftNavBarItem, animated: true)


    }

    // if user taps on profile picture
    @objc func profilePictureTapped() {

        let userProfilePage = UserProfilePage()
        present(userProfilePage, animated: true, completion: nil)

    }
}

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Попробуйте это;

private func setupRightItem() {
    let userProfileButton = UIButton(type: .custom)
    userProfileButton.imageView?.contentMode = .scaleAspectFill
    userProfileButton.clipsToBounds = true
    userProfileButton.addTarget(self, action: #selector(profilePictureTapped), for: .touchUpInside)
    userProfileButton.setImage(#imageLiteral(resourceName: "profilePictureSmall.png"), for: .normal)
    userProfileButton.frame = CGRect(x: 0, y: 0, width: 30, height: 30)

    self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: userProfileButton)

    userProfileButton.widthAnchor.constraint(equalToConstant: 30).isActive = true
    userProfileButton.heightAnchor.constraint(equalToConstant: 30).isActive = true
  }

  @objc private func goProfile() {
    /// -> Action
  }
0 голосов
/ 20 июня 2019
    let navBtn = UIButton(type: .custom)
    navBtn.setImage("yourImage", for: .normal)
    navBtn.frame = CGRect(x: 0, y: 0, width: 28, height: 28)
    navBtn.addTarget(self, action: #selector(self.openProfile(_:)), for: .touchUpInside)

    let view = UIView(frame: CGRect(x: 0, y: 0, width: 28, height: 28))
    view.cornerRadius = 14
    view.backgroundColor = Global.colorBlue

    view.addSubview(navBtn)

    let leftNavBarItem = UIBarButtonItem(customView: view)
    self.navigationItem.setLeftBarButton(leftNavBarItem, animated: true)


    @objc
    func openProfile(_ sender: UIButton) {

    }
...