SWRevealController Программно
Я пытаюсь использовать SWRevealController программно, вызывая SWRevealController Delegate
в моем ViewController, но когда я добавляю следующее viewDidLoad()
barButtonItem не работает, и приложение падает при попадании addGestureRecognizer(self.revealViewController().panGestureRecognizer())
, Ниже приведен код в viewDidLoad
:
navigationItem.leftBarButtonItem = UIBarButtonItem(image: #imageLiteral(resourceName: "menu2-black-32").withRenderingMode(.alwaysOriginal), style: .plain, target: self.revealViewController(), action: #selector(SWRevealViewController.revealToggle(_:)))
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
Я не уверен, что является причиной этой проблемы, так как этот код работает для одного из моих контроллеров представления и ни для одного из других.
Заранее спасибо!
РЕДАКТИРОВАТЬ:
Похоже, что мой self.revealViewController() равен нулю, когда я отредактировал код так:
if self.revealViewController() != nil {
navigationItem.leftBarButtonItem = UIBarButtonItem(image:
#imageLiteral(resourceName: "menu2-black-
32").withRenderingMode(.alwaysOriginal), style: .plain, target:
self.revealViewController(), action:
#selector(SWRevealViewController.revealToggle(_:))) self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
}
Но я не уверен, почему его ноль.....
1 ответ
Во-первых, вам нужно создать кнопку панели
@IBOutlet weak var menuButton: UIBarButtonItem!
В viewDidLoad вы можете добавить этот
if self.revealViewController() != nil
{
menuButton.target = self.revealViewController()
menuButton.action = #selector(SWRevealViewController.revealToggle(_:))
self.view.addGestureRecognizer(self.revealViewController().tapGestureRecognizer())
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
}
Это прекрасно работает, вы также можете настроить menuButton(UIBarButtonItem)