#ios #iphone #swift #swift3 #viewcontroller
#iOS #iPhone #swift #swift3 #viewcontroller
Вопрос:
Когда я нажимаю кнопку левой панели на MessageController, я устанавливаю для нее значение false. Затем я представляю PopUpViewController и при нажатии кнопки запускается функция removeAnimate(). И в этой функции я хотел бы установить для кнопки левой панели MessageController значение IsEnabled равным true. Я пробовал, но это не работает. Может кто-нибудь помочь?
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
}
}
Комментарии:
1. Как вы переходите от
MessageController
кPopUpViewController
?2. @Mr.Bistra в функции preformSettings()
3. Это означает отсутствие перехода?
Ответ №1:
Вы можете использовать протоколы. Напишите протокол
protocol PopViewControllerDelegate: class {
func enableBackButton()
}
В PopUpViewController создайте объект этого протокола.
class PopUpViewController: UIViewController {
var delegate: PopViewControllerDelegate?
....
func removeAnimate() {
...
delegate?.enableBackButton()
}
}
В MessageController реализован этот протокол.
class MessageController: UITableViewController {
func preformSettings(){
let popViewController = PopUpViewController()
popViewController.delegate = self
self.addChildViewController(popViewController)
....
}
}
extension MessageController: PopViewControllerDelegate {
func enableBackButton() {
navigationItem.leftBarButtonItem?.isEnabled = true
}
}
Комментарии:
1. popViewController.delegate = self Не может присвоить свойству ‘delegate’ значение let constant, даже если я изменю let popViewController = PopUpViewController() на значение var
2. внесите
delegate
вPopViewController
var, как показано.