2016-02-07 3 views
-1

Я перетащил ViewController на свою раскадровку, перешел к ней с помощью popover segue и установил размер и стиль в готовом представлении VC. Мой вопрос: если у моего popover есть несколько кнопок, где должен выполняться их код?Делегация для представления VC, From Popover

  1. Например, следует ли использовать шаблон делегирования, где в файле prepareForSegue я передаю ссылку на делецию как self? Затем делегируйте назад?
  2. Или, должен ли я создать новый viewController для popover, а затем поставить код для запуска там?
  3. Я также читал this tutorial и кто-то сказал ...

"И вы разжиться контроллера содержимого с помощью метода popoverPresentationController.presentedViewController в UIPopoverPresentationController

Что был бы идеален для меня, так как код, который я хочу, изменит некоторые представляющие переменные VC, будет делегироваться обратно к представленному VC.

ответ

0

В конце концов просто пошел с делегацией в конкуренции блока распускать вызова поповер:

class NavigationViewController: UIViewController { 

    var presentingVC_Delegate: mainLists_PopoverDelegation! 
    var whatToDo = "Placeholder" 

    @IBOutlet var shareBtn: UIButton! 
    @IBOutlet var clearBtn: UIButton! 
    @IBOutlet var settingsBtn: UIButton! 

    //***** ----- ***** ------ ***** ----- ***** ----- ***** 
    //Menu Button Functions 
    //***** ----- ***** ------ ***** ----- ***** ----- ***** 
    @IBAction func shareBtn_Pressed(sender: AnyObject) { 
     self.dismissViewControllerAnimated(true, completion: { finished in 
      self.presentingVC_Delegate.call_ActivityVC() 
     }) 
    } 
    @IBAction func clearBtn_Pressed(sender: AnyObject) { 
     self.dismissViewControllerAnimated(true, completion: { finished in 
      self.presentingVC_Delegate.deleteList() 
     }) 
    } 
    @IBAction func settingsBtn_Pressed(sender: AnyObject) { 
     self.dismissViewControllerAnimated(true, completion: { finished in 
      self.presentingVC_Delegate.presentSettingsVC() 
     }) 
    } 
} 

protocol mainLists_PopoverDelegation { 
    func call_ActivityVC() 
    func deleteList() 
    func presentSettingsVC() 
} 

С этими тремя функциями, расположенными в главном VC.

0

Просто установите действия кнопки popover в файле prepareForSegue, чтобы указать на функции в presentingVC.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if let dest = segue.destinationViewController as? MyPopoverViewController { 
     let myButton = dest.view.viewWithTag(MY_BUTTON_TAG) as! UIButton 
     myButton.addTarget(self, action: "onMyButton", forControlEvents: .TouchUpInside) 
    } 
} 

func onMyButton() { 
    ... 
} 

Или еще лучше с затворами, используя расширение UIButton вроде этого:

https://www.mikeash.com/pyblog/friday-qa-2015-12-25-swifty-targetaction.html

+1

Спасибо Tapani. Я никогда не видел такого метода, как раньше. Не могли бы вы объяснить, почему это способ сделать это? Мне нравится продвигаться как разработчик, а не просто реализовывать код в моем приложении, не понимая его. Почему этот новый способ, а не делегирование? –

+1

Я не верю, что это сработает. Выходы в 'destinationViewController' не настроены на' prepareForSegue', поэтому 'dest.myButton' будет' nil'. – vacawama

+0

Вы всегда можете найти кнопку по тегу. Таким образом, выходы не должны устанавливаться, и вам даже не нужен класс для контроллера popover view. – Tapani

Смежные вопросы