2016-10-06 4 views
1

MessageControllerの左のバーボタンをクリックすると、isEnabledがfalseになります。次に、私はPopUpViewControllerを表示し、ボタンをクリックするとremoveAnimate()関数が実行されます。そしてその関数では、左にあるMessageController left barボタンをisEnabledにtrueに設定したいと思います。私は試しましたが、うまくいきません。助けてもらえますか?他のViewControllerからleftBarButtonItemを有効にするにはどうすればよいですか?

class PopUpViewController: UIViewController { 
... 
override func viewDidLoad() { 
    super.viewDidLoad() 

    self.view.backgroundColor = UIColor.black.withAlphaComponent(0.8) 
    self.showAnimate() 
} 
func showAnimate() 
{ 
    view.backgroundColor = UIColor.black.withAlphaComponent(0.8) 
    self.view.transform = CGAffineTransform(scaleX: 1.3, y: 1.3) 
    self.view.alpha = 0.0; 
    UIView.animate(withDuration: 0.25, animations: { 
     self.view.alpha = 1.0 
     self.view.transform = CGAffineTransform(scaleX: 1.0, y: 1.0) 
    }); 
} 
func removeAnimate() 
{ 
let messagView = MessageController() 
    UIView.animate(withDuration: 0.25, animations: { 
     self.view.transform = CGAffineTransform(scaleX: 1.3, y: 1.3) 
     self.view.alpha = 0.0; 
     }, completion:{(finished : Bool) in 
      if (finished) 
      { 
       self.view.removeFromSuperview() 
       messagView.navigationItem.leftBarButtonItem?.isEnabled = true 
      } 
    }); 
} 
lazy var cancleButton: UIButton = { 
    let button = UIButton(type: .system) 
    button.translatesAutoresizingMaskIntoConstraints = false 
    button.setTitle("Cancel", for: UIControlState()) 
    button.titleLabel?.font = UIFont.boldSystemFont(ofSize: 20) 
    button.tintColor = .white 
    button.addTarget(self, action: #selector(removeAnimate), for: .touchUpInside) 
    return button 
}() 
} 

MessageViewController

class MessageController: UITableViewController { 
override func viewDidLoad() { 
    super.viewDidLoad() 

    navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Logout", style: .plain, target: self, action: #selector(preformSettings)) 
} 
func preformSettings(){ 

    let popViewController = PopUpViewController() 
    self.addChildViewController(popViewController) 
    popViewController.view.frame = self.view.frame 
    self.view.addSubview(popViewController.view) 
    popViewController.didMove(toParentViewController: self) 
    navigationItem.leftBarButtonItem?.isEnabled = false 
} 

} 
+0

どのように 'MessageController'から' PopUpViewController'に切り替えるのですか? –

+0

@ Mr.Bistra in func preformSettings() – Moonwalker4z

+0

これはセグを意味しませんか? –

答えて

1

あなたは、プロトコルを使用することができます。プロトコルを作成する

protocol PopViewControllerDelegate: class { 
    func enableBackButton() 
} 

PopUpViewControllerでは、このプロトコルのオブジェクトを作成します。

class PopUpViewController: UIViewController { 
    var delegate: PopViewControllerDelegate? 
    .... 

    func removeAnimate() { 
     ... 
     delegate?.enableBackButton() 
    } 

} 

このプロトコルを実装します。

class MessageController: UITableViewController { 

    func preformSettings(){ 
     let popViewController = PopUpViewController() 
     popViewController.delegate = self 
     self.addChildViewController(popViewController) 
     .... 
    } 

} 

extension MessageController: PopViewControllerDelegate { 
    func enableBackButton() { 
     navigationItem.leftBarButtonItem?.isEnabled = true 
    } 
} 
+0

popViewController.delegate = self 'delegate'プロパティに代入できないものは、定数です letをpopViewController = PopUpViewController()に変更しても、それはvarに – Moonwalker4z

+0

の 'PopViewController'の' delegate'をvarにします。 – Mathews

+0

ありがとうございました – Moonwalker4z

関連する問題