2017-10-20 27 views
0

Ainsi, j'ai 2 vues avec un bouton au milieu d'elles. Le bouton est contraint à la vue du centre. Comme je glisse à l'autre vue, le bouton se déplace dans la deuxième position sur l'autre vue (pour être visible). Mon problème est que je ne peux pas accéder à la fonction du bouton de mon autre vue, donc le bouton n'est pas fonctionnel. Il est créé avec de contentView:Le bouton dans la vue de conteneur ne fonctionne pas dans la deuxième vue

enter image description here

Voici mon code:

import UIKit 

class MainVC: UIViewController { 

    let setupMainVC = SetupMainVC() 

    var rightViewXConstant : NSLayoutConstraint! 
    var leftViewXConstant : NSLayoutConstraint! 
    var arrowLeftXConstant : NSLayoutConstraint! 
    var centerViewXConstant : NSLayoutConstraint! 

    var rightViewOpen = false 
    var leftViewOpen = false 

    var windowSize = CGFloat() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let window = UIWindow.init(frame: UIScreen.main.bounds) 
     window.makeKeyAndVisible() 

     view.backgroundColor = UIColor.clear 

     setupMainVC.mainVC = self 
     setupMainVC.setupViews() 

     windowSize = window.frame.size.width 

     setupLeftViewController() 
     setupCenterViewController() 


     navigationItem.title = "Center View" 

     self.setupMainVC.arrowButtonLeft.transform = CGAffineTransform(rotationAngle: 0) 
     arrowLeftXConstant.constant = 20 

     print(windowSize) 

     navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Left", style: .plain, target: self, action: #selector(leftButAction)) 
     navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Right", style: .plain, target: self, action: #selector(rightButAction)) 
     setupMainVC.arrowButtonLeft.addTarget(self, action: #selector(leftButAction), for: .touchUpInside) 

     NotificationCenter.default.addObserver(self, selector: #selector(leftButAction), name: NSNotification.Name("leftButtonAction"), object: nil) 
    } 

    func leftButAction() { 
     print("Left Action") 

     if leftViewOpen { 
      leftViewOpen = false 
      centerViewXConstant.constant = 0 
      leftViewXConstant.constant = 0 
      self.setupMainVC.arrowButtonLeft.transform = CGAffineTransform(rotationAngle: 0) 
      arrowLeftXConstant.constant = 20 
      navigationItem.title = "Center View" 
      print(false) 
     } else { 
      leftViewOpen = true 
      centerViewXConstant.constant = windowSize 
      leftViewXConstant.constant = windowSize 
      self.setupMainVC.arrowButtonLeft.transform = CGAffineTransform(rotationAngle: -179) 
      arrowLeftXConstant.constant = -20 
      navigationItem.title = "Left View" 
      print(true) 
     } 

     UIView.animate(withDuration: 0.3) { 
      self.view.layoutIfNeeded() 
     } 

    } 

    func rightButAction() { 
     print("Right Action") 

     if rightViewOpen { 
      rightViewOpen = false 
      print(false) 
     } else { 
      rightViewOpen = true 
      print(true) 
     } 

     UIView.animate(withDuration: 0.3) { 
      self.view.layoutIfNeeded() 
     } 
    } 

    func center() { 
     let center = CenterVC() 
     addChildViewController(center) 
     center.view.translatesAutoresizingMaskIntoConstraints = false 
     view.addSubview(center.view) 

     centerViewXConstant = center.view.centerXAnchor.constraint(equalTo: center.view.centerXAnchor, constant: 0) 
     centerViewXConstant.isActive = true 
     center.view.centerYAnchor.constraint(equalTo: center.view.centerYAnchor).isActive = true 
     center.view.heightAnchor.constraint(equalTo: center.view.heightAnchor).isActive = true 
     center.view.widthAnchor.constraint(equalTo: center.view.widthAnchor).isActive = true 
     center.view.backgroundColor = .blue 

     center.didMove(toParentViewController: self) 
    } 

    //MARK: Center View 
    func setupCenterViewController() { 
     let controller = CenterVC() 

     addChildViewController(controller) 
     controller.view.translatesAutoresizingMaskIntoConstraints = false 
     view.addSubview(controller.view) 
     controller.view.addSubview(setupMainVC.roundViewOnLeftView) 
     controller.view.addSubview(setupMainVC.arrowButtonLeft) 

     centerViewXConstant = controller.view.leftAnchor.constraint(equalTo: setupMainVC.leftView.rightAnchor, constant: 0) 
     centerViewXConstant.isActive = true 

     controller.view.centerYAnchor.constraint(equalTo: setupMainVC.leftView.centerYAnchor).isActive = true 
     controller.view.heightAnchor.constraint(equalTo: setupMainVC.leftView.heightAnchor).isActive = true 
     controller.view.widthAnchor.constraint(equalTo: setupMainVC.leftView.widthAnchor).isActive = true 

     setupMainVC.roundViewOnLeftView.centerXAnchor.constraint(equalTo: controller.view.leftAnchor).isActive = true 
     setupMainVC.roundViewOnLeftView.centerYAnchor.constraint(equalTo: controller.view.centerYAnchor).isActive = true 
     setupMainVC.roundViewOnLeftView.heightAnchor.constraint(equalToConstant: 100).isActive = true 
     setupMainVC.roundViewOnLeftView.widthAnchor.constraint(equalToConstant: 100).isActive = true 

     arrowLeftXConstant = setupMainVC.arrowButtonLeft.centerXAnchor.constraint(equalTo: setupMainVC.roundViewOnLeftView.centerXAnchor, constant: 20) 
     arrowLeftXConstant.isActive = true 

     setupMainVC.arrowButtonLeft.centerYAnchor.constraint(equalTo: setupMainVC.roundViewOnLeftView.centerYAnchor).isActive = true 
     setupMainVC.arrowButtonLeft.heightAnchor.constraint(equalToConstant: 100).isActive = true 
     setupMainVC.arrowButtonLeft.widthAnchor.constraint(equalToConstant: 100).isActive = true 

     controller.didMove(toParentViewController: self) 
    } 

    //MARK: Left View 
    func setupLeftViewController() { 
     let controller = LeftVC() 
     //let navBar: UINavigationController = UINavigationController(rootViewController: controller) 
     addChildViewController(controller) 
     controller.view.translatesAutoresizingMaskIntoConstraints = false 
     view.addSubview(controller.view) 

     leftViewXConstant = controller.view.rightAnchor.constraint(equalTo: setupMainVC.centerView.leftAnchor, constant: 0) 
     leftViewXConstant.isActive = true 

     controller.view.centerYAnchor.constraint(equalTo: setupMainVC.centerView.centerYAnchor).isActive = true 
     controller.view.heightAnchor.constraint(equalTo: setupMainVC.centerView.heightAnchor).isActive = true 
     controller.view.widthAnchor.constraint(equalTo: setupMainVC.centerView.widthAnchor).isActive = true 

     controller.didMove(toParentViewController: self) 
    } 
} 

Répondre

0

Manage pour résoudre le problème. Toujours les petites choses sont le gros problème. Il ne fonctionne pas à cause de cette partie de la fonction:

controller.view.addSubview(setupMainVC.roundViewOnLeftView) 
controller.view.addSubview(setupMainVC.arrowButtonLeft) 

Pour le bouton pour travailler, il doit être une sous-vue du MainView (le conteneur) de sorte qu'il sera dans la même vue hiérarchique comme si :

view.addSubview(setupMainVC.roundViewOnLeftView) 
view.addSubview(setupMainVC.arrowButtonLeft)