2013-07-10 6 views
4

Просто интересно об объекте отправителя.performSegue: withSender: объект-отправитель

Я знаю, что вы можете получить к нему доступ по методу prepareForSegue..., но доступен ли он в следующем destinationViewController?

i.e in viewDidLoad Могу ли я получить доступ к объекту segueSender или что-то еще?

Я никогда не видел этого в документации. Я просто подумал, что это может быть полезно.

редактирования.К CLARITY

Я не спрашиваю, как выполнить SEGUE или найти SEGUE или что-нибудь подобное.

Скажем, у меня есть два контроллера вида (VCA и VCB).

Существует отступ от VCA до VCB с идентификатором «segue».

В СВУ я бегу ...

[self performSegueWithIdentifier:@"segue" sender:@"Hello world"]; 

Мой вопрос я могу получить доступ к @ «привет мир» строка из VCB или она доступна только в prepareForSegue... методе внутри СВУ?

Возможно, я могу получить доступ к объекту отправителя segue с контроллера назначения?

+0

и можно использовать для получить объект контроллера представления от раскадровки UIStoryboard * iPhoneStoryboard = [UIStoryboard storyboardWithName: @ «MainStoryboard_iPhone»: nil]; ViewController * firstViewController = [iPhoneStoryboard instantiateViewControllerWithIdentifier: @ "FirstViewController"]; –

+0

?? Вы прочитали вопрос? – Fogmeister

+0

Вы должны получить доступ к контроллеру вида просмотра в поле зрения, загрузите? –

ответ

1

Таким образом, ответ «Нет».

Спасибо за помощь.

0

Вы всегда можете получить сэг со склада и получить sourceViewController. Что-то вроде этого:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"myStorboard" bundle:nil]; 
UIStoryboardSegue *mySegue = [storyboard instantiateViewControllerWithIdentifier:@"mySegue"]; 
[mySegue sourceViewController]; 

EDIT: Комментарии бить меня к нему. ;)

+0

ОК, но в коде в viewController я могу запустить эту строку кода ... '[self performaSegueWithIdentifier: @" SomeIdentifier "sender: someObject];'. Мой вопрос заключается не в том, как получить доступ к segue или как выполнить сеанс. Мой вопрос просто: 'someObject' доступен в destinationViewController. – Fogmeister

+0

Ну, вы можете установить senderobject как свойство destinationViewController (или источника), прежде чем выполнить segue. Чтобы метод получил отправителя segue, я думаю, проблема в том, что один из них с одним идентификатором может выполняться много раз с разными отправителями, поэтому трудно определить правильный экземпляр segue в destinationViewController, следовательно трудно получить нужного отправителя. Также, см. Здесь: http://stackoverflow.com/questions/14964487/get-sender-of-segue-in-destination-view-controller – Esso

0

Если вы пытаетесь передать объект из одного контроллера представления к другому вы можете сделать что-то вроде этого:

В контроллере родительского вида:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    // Only if you have multiple segues. 
    if ([segue.identifier isEqualToString:@"NameOfYourSegue"]) { 
     // Cast necessary to access properties of the destination view controller. 
     [(YourChildViewController *)segue.destinationViewController setObject:theObjectToPass]; 
    } 
} 

Вам нужно дать вашему segue имя в раскадровке и объявить свойство для объекта передать в контроллер представления назначения.

+0

Спасибо, да, я знал об этом, я просто не был уверен, что объект отправителя возможно, был доступен в контроллере вида назначения. – Fogmeister

1

Да, вы можете.

Старый вопрос, но Ill поп в ответ, используя быстрые

первым вы звоните

performSegueWithIdentifier("<#your segue identifier #>", sender: <#your object you wish to access in next viewController #>) 

в prepareForSegue

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

     let dest = segue.destinationViewController as! <# your destination vC#> 
     dest.<# sentThroughObject #> = sender 
    } 
} 

Тогда в ВХ вы непосредственно перейти иметь вар, который будет принимать проходящих через объект

class NextViewController: UIViewController { 

    var <# sentThroughObject #> = AnyObject!() 

//cast <# sentThroughObject #> as! <#your object#> to use 
} 

UPDATE: SWIFT 3

performSegue(withIdentifier: "<#your segue identifier #>", sender: <#Object you wish to send to next VC#>) 


override func prepare(for segue: NSStoryboardSegue, sender: Any?) { 
     let destination = segue.destinationController as! <# cast to your destination VC#> 
     destination.sentViaSegueObject = sender as? <#your object#> 
    } 

В целевом VC имеет свойство принимать отправленный объект

var sentViaSegueObject = <#your object#>? 
Смежные вопросы