2013-06-01 5 views
0
AView.m 
     UIButton *btn = [[UIButton alloc]initWithFrame()]; 
     [btn addTarget:self action:@selectior(perpareForSegue:sender:) forControlEvents:UIControlEventTouchUpInside]; 
     [self.view addSubview:btn]; 


-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
     //I want to get destinationViewController of segue with identifier"toNextView" 
     // and then perform the segue 
     // Difficulties that I encounter is that I have a NSInvalidArgumentException 
     // Is that mean the view controller doesn't know the existence of the segue? 
     // I have connected two controller with a segue 
} 

Я хочу, чтобы получить destinationViewController из Segue с идентификатором «toNextView» , а затем выполнить SEGUE трудности, с которыми я сталкиваюсь, что у меня есть NSInvalidArgumentException Это что означает, что контроллер представления не знает о существовании Segue ? Я подключил два контроллера с помощью segue СпасибоКак запрограммировать segue (не выполнять segue)?

ответ

0

Посмотрите на class reference of UIStoryboardSegue.

Метод prepareForSegue: отправитель: вызывается средой раскадровки при срабатывании segue. Он не предназначен для вызова сеанса.

Вот объяснение от референсного класса:

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

Из ссылки класса:

Вы все еще можете инициировать переход программно с помощью performSegueWithIdentifier: отправитель: метод UIViewController, если вы хотите. Вы можете сделать это, чтобы инициировать segue из источника, который был добавлен программным путем и, следовательно, недоступен в Interface Builder.

Так, просто указать селектор для кнопки, а затем внутри селектор просто вызовите performSegueWithIdentifier: Отправитель: метод.

[btn addTarget:self action:@selector(whateverAction) forControlEvents:UIControlEventTouchUpInside]; 

- (void)whateverAction { 
    [self performSegueWithIdentifier:@"toNextView" sender:nil]; 
} 

И если вы хотите, чтобы передать объект контроллера представления назначения в Segue, это где prepareForSegue: отправитель: метод входит в игру, как описано в ссылке класса, например:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"toNextView"]) { 
     DestinationViewController *vc = (DestinationViewController *)[segue destinationViewController]; 
     //do whatever you want to do with vc, including passing of data, setting property, etc. 
    } 
} 
+0

Спасибо, но возможно ли выполнить функциюSegueWithIdentifier, пока я передаю данные в контроллер представления судьбы? – user2429523

+0

@ user2429523 это использование метода prepareForSegue. Я обновил свой ответ. –

+0

Отлично ... это сработает, добавив вопрос: как отправить тег нажатой кнопки в конечный диспетчер представлений? – user2429523

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