2017-01-07 14 views
-1

Я совершенно новый в разработке iOS и ищущий ваш совет.кнопка действие, чтобы позвонить по методу

Я рассматриваю один проект на GitHub.

Я хотел бы добавить некоторые функции. Я хотел бы добавить кнопку, которая покажет SideMenu и, возможно, скроет ее.

SideMenu - это экземпляр класса SideMenu, который создан в методе ViewDidLoad. Как вызвать метод sideMenu.toggleMenu (true), используя метод действия кнопки.

class HomeViewController: UIViewController, SideMenuDelegate { 

    @IBAction func menuButtonTapped(_ sender: Any) { 

    sideMenu.toggleMenu(open: true) 

    } 


    override func viewDidLoad() { 
     super.viewDidLoad() 

    let sideMenu = SideMenu(menuWidth: 200 , menuItemTitles: ["", "", "Profile", "Settings", "Restaurant"], parentViewController: vviewController) 

     sideMenu.menuDelegate = self 

} 

Моя кнопка создается с помощью раскадровки, поэтому я не могу добавить это метод действия в viewDidLoad.

Теоретически я могу создать кнопку программно в ViewDidLoad. Это единственное решение?

enter image description here

+0

Я не понимаю, вы используете раскадровку для своей кнопки или программно? Кажется, вы хотите, чтобы это было программно, но почему у вас есть IBAction для вашей кнопки? –

+0

Если вы используете раскадровку. Вы подключили @IBAction с помощью ctrl-перетаскивания? Сделайте оператор быстрой печати в своем менюButtonTapped, чтобы увидеть, выполняется ли его при щелчке. – Emptyless

+0

Предположительно, ваш код не компилируется на данный момент, потому что sideMenu является локальной константой для просмотраDidLoad и недоступен из IBAction? –

ответ

1

Проблема нет ничего, что делать с вашей кнопки или где вы объявляете его.

sideMenu в вашем коде является константой viewDidLoad и недоступен для IBAction.

Переместить ваше определение sideMenu снаружи способа и сделать его по желанию:

var sideMenu:SideMenu? 

В viewDidLoad установить его, как вы в настоящее время (удалить LET)

sideMenu = SideMenu(... 

В IBAction, разворачивать опционально для использования:

if let sideMenu = sideMenu { 
    // do what you need with sideMenu 
else { 
    // handle error sideMenu not initialised properly 
} 

См. Комментарии vacawama для альтернатив.

+1

Не нужно разворачивать. Просто используйте необязательную цепочку при доступе к ней ... 'sideMenu? .ToggleMenu (open: true)', 'sideMenu? .MenuDelegate = self' и т. Д. – vacawama

+0

@vacawama хорошая точка, хотя это скроет ошибку, если sideView не правильно. Будет редактировать ответ. –

+1

Конечно, но эта ошибка является одноразовой ошибкой программирования, а не тем, что нужно обрабатывать повторно. Фактически, сделать его «var sideMenu: SideMenu!» Действительно может быть лучшим способом, потому что тогда вы сразу узнаете, что забыли его установить. Вот как справляются '@ IBOutlets'. – vacawama