2017-09-19 2 views
1

Je suis en train d'ajouter une action à une vue que je suis d'ajouter à la navigation titleviewaction vue personnalisée titre de navigation ne déclenche pas

let titleview = UIView() 
     titleview.isUserInteractionEnabled = true 
     let tapGesture = UITapGestureRecognizer(target: self, action: #selector(VC.openPopup)) 
     titleview.addGestureRecognizer(tapGesture) 
     let label = UILabel() 
     label.textColor = UIColor.white 
     label.font = UIFont.systemFont(ofSize: 12) 
     label.text = "Tap Here to change" 
     titleview.addSubview(self.selectGroupButton) 
     titleview.addSubview(label) 

J'ajoute ce point de vue que la navigation titleview

self.navigationItem.titleView = self.selectGroupView 
self.navigationItem.titleView?.isUserInteractionEnabled = true 

Mais ma méthode n'est pas appelée.

+0

Vous pouvez ajouter UIView sur la barre de navigation en temps de conception de titre dans viewcontroller de story-board. –

Répondre

1

Dans votre code, je vois quelques problèmes,

  1. image Réglage Pas pour le lable.
  2. Vous ne savez pas que vous sélecteur de configuration pour le bouton

S'il vous plaît voir le code suivant change

let titleview = UIView() 
     titleview.frame = CGRect(x: 0, y: 0, width: 200, height: 40) 
     titleview.isUserInteractionEnabled = true 
     let tapGesture = UITapGestureRecognizer(target: self, action: #selector(your class.openPopup)) 
     titleview.addGestureRecognizer(tapGesture) 
     let label = UILabel() 
     label.frame = CGRect(x: 0, y: 0, width: 200, height: 20) 
     label.textColor = UIColor.red 
     label.font = UIFont.systemFont(ofSize: 12) 
     label.text = "Tap Here to change" 

     let selectGroupButton: UIButton = UIButton(frame: CGRect(x:0, y:20, width:200, height:20)) 
     selectGroupButton.setTitle("tt", for: UIControlState.normal) 
     selectGroupButton.setTitleColor(UIColor.red, for: UIControlState.normal) 
     selectGroupButton.addTarget(self, action: #selector(yourclass.methodcall), for: UIControlEvents.touchUpInside) 

     titleview.addSubview(selectGroupButton) 
     titleview.addSubview(label) 

     self.navigationItem.titleView = titleview 
     self.navigationItem.titleView?.isUserInteractionEnabled = true 
0

Essayez ceci:

let NavigationView = UIView() 
     NavigationView.translatesAutoresizingMaskIntoConstraints = false 
       self.navigationController?.navigationBar.addSubview(NavigationView) 
     self.navigationController?.navigationBar.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-0-[NavigationView]-0-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["NavigationView":NavigationView])) 
     self.navigationController?.navigationBar.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[NavigationView]-0-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["NavigationView":NavigationView])) 
     NavigationView.backgroundColor = UIColor.orange 
     let singleTap = UITapGestureRecognizer(target: self, action: #selector(singleTapAction)) 
     singleTap.delegate = self 
     singleTap.numberOfTapsRequired = 1 
     NavigationView.addGestureRecognizer(singleTap) 

Ensuite, mettre en œuvre votre événement geste comme celui-ci,

func singleTapAction() { 
     print("Single") 
// Write your code here ... 

    } 
0

Il vous manque de donner frame à titleview

override func viewDidLoad() { 
    super.viewDidLoad() 

    let titleview = UIView(frame: CGRect(x: 20, y: 10, width: 200, height: 24)) 

    titleview.isUserInteractionEnabled = true 
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(openPopup)) 
    titleview.addGestureRecognizer(tapGesture) 
    let label = UILabel(frame: CGRect(x: 40, y: 10, width: 200, height: 24)) 
    label.textColor = .red 
    label.textAlignment = .center 
    label.text = "Tap Here to change" 
    titleview.addSubview(label) 
    self.navigationItem.titleView = titleview 
    self.navigationItem.titleView?.isUserInteractionEnabled = true 

} 
func openPopup(){ 
    print("Jack") 
}