2015-09-10 2 views
0

У меня возникли проблемы, идентифицирующая destinationViewController с помощью SWRevealViewControllerустановка делегата на цели ViewController

О некотором ViewControllers я использовал метод prepareForSegue для идентификации назначения следующего SWRevealViewController viewControllers напрямую связаны через Segues на раскадровке. И используя этот метод, я могу определить targetViewcontroller и установить его как делегата.

Однако у меня есть BarButtonItem в моем FirstViewController, что связано с MenuViewController следующим в viewDidLoad методе

SWRevealViewController *revealViewController = self.revealViewController; 
    if(revealViewController){ 
     [self.sideBarButton setTarget:self.revealViewController]; 
     [self.sideBarButton setAction:@selector(rightRevealToggle:)]; 

     revealViewController.rightViewRevealWidth = self.view.frame.size.width * 0.65; 
    } 

Это показывает MenuViewController и находится на MenuViewController, что я хочу, чтобы установить в качестве делегата.

Так в идеале я должен быть в состоянии сделать что-то вроде:

MenuViewController* menuVC = revealViewController.destinationViewController; 
menuVC.delegate = self; 

Однако я не могу идентифицировать MenuViewControler с помощью метода viewDidLoad, и я не уверен в том, как реорганизовать sidebarbutton использовать именованный раскадровку непосредственно перейти.

ответ

1

SWRevealViewController имеет контроллер заднего вида и frontViewController. Значит, вы хотите это сделать?

MenuViewController* menuVC = (MenuViewController*)revealViewController.rearViewController; menuVC.delegate = self;

+0

Благодарности. Это именно то, что я искал. –

+0

У меня все еще проблема. Поскольку я назначаю делегат в методе viewDidLoad, когда не был создан экземпляр MenuVC, поэтому два диспетчера просмотра не имеют ссылки друг на друга, чтобы методы делегирования не срабатывали. Не знаете, как его преодолеть. Обычно я хотел бы использовать prepareForSegue, но я не вижу способа настроить Segues для этого конкретного случая с помощью SWReveal –

+0

. Вы можете подклассифицировать контроллер и в методе viewDidLoad установить задний и внешний контроллер ... Почему вам нужно делегировать из меню в ваш frontViewController? Вы можете общаться через контроллер рассылки. – tbilopavlovic

0
if self.revealViewController() != nil { 
       menuButton.target = self.revealViewController() 
       menuButton.action = #selector(SWRevealViewController.revealToggle(_:)) 
       self.revealViewController().delegate = self 
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer()) 
       self.revealViewController().rearViewRevealWidth = 
      } 

Ниже являются делегаты испытаний в swift4:

func revealController(_ revealController: SWRevealViewController!, willMoveTo position: FrontViewPosition) { } 
func revealControllerPanGestureBegan(_ revealController:SWRevealViewController){} 
func revealController(_ revealController: SWRevealViewController, didMoveTo position: FrontViewPosition) {} 
Смежные вопросы