2013-04-23 15 views
8

viewController'a giden iki segue var. 2 segues kullanarak aynı viewController'a bağlanan 2 düğme vardır. Bu viewController içinde hangi butonun tıklandığını kontrol etmem gerekiyor. Öyleyse aslında hangi dilin kullanıldığını/önceden oluşturulduğunu kontrol etmem gerekiyor. Bunu viewControllers sınıfında nasıl kontrol edebilirim? prepareForSegue yönteminin olduğunu biliyorum, ancak amacım için kullanamıyorum çünkü prepareForSegue'u 2 düğmenin bulunduğu sınıfa koymalıyım ve orada istemiyorum ama ben viewControllers sınıfında olmasını istiyorum. Bu sınıftaki bazı değişkenlere erişip bunları ayarlamanız gerekir.Hangi segue kullanıldığını nasıl kontrol edilir?

cevap

8

Sen bir değişkeni ayarlamak gerekir Birincisinin preparasöse yönteminde ikinci viewcontroller. Bu nasıl yapılır:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if([segue.identifier isEqualToString:segueIdentifier1]) 
    { 
     SecondViewController *secondVC = (SecondViewController *)segue.destinationViewController; 
     if(sender.tag == ...) // You can of course use something other than tag to identify the button 
     { 
      secondVC.identifyingProperty = ... 
     } 
     else if(sender.tag == ...) 
     { 
      secondVC.identifyingProperty = ... 
     } 
    } 
} 

Ardından, oraya nasıl geldiğinizi anlamak için ikinci vc'de bu özelliği kontrol edebilirsiniz. 2 düğmenin storyboard'unda 2 cürüm oluşturduysanız, karşılık gelen özellik değerini ayarlamak için sadece işaret tanımlayıcısı yeterlidir. Ardından kod dönüşür:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if([segue.identifier isEqualToString:segueIdentifier1]) 
    { 
     SecondViewController *secondVC = (SecondViewController *)segue.destinationViewController; 
     secondVC.identifyingProperty = ... 
    } 
    else if([segue.identifier isEqualToString:segueIdentifier2]) 
    { 
     SecondViewController *secondVC = (SecondViewController *)segue.destinationViewController; 
     secondVC.identifyingProperty = ... 
    } 
} 
+0

Bunu yapmış, ancak ettik bu koyduğunuzda: PageScrollViewController * kontrolör = (PageScrollViewController *) segue.destinationViewController; controller.startStory = YES; uygulama çöküyor – nonuma

+0

*** Yakalanmamış istisna 'NSInvalidArgumentException' nedeniyle uygulama sonlandırma, nedeni: '- [UIViewController setStartStory:]: örneğine gönderilen tanınmayan seçici 0x9976420' *** İlk çağrı bloğu atmak: – nonuma

+0

Tuhaf kısmı hata "setStartStory" hakkında bir şeyler söylüyor ama bunu hiç kullanmadım? StartStory kullanıyorum – nonuma

2

Öncelikle, segues tanımlayıcınızı doğrudan storyborads veya performSegueWithIdentifier yöntemini kullanarak kodunuz aracılığıyla ayarlamanız gerekir. bağımsız seçilip şekilde, görünüm denetleyicisi aşağıdaki yöntemi ateş edeceği, bu nedenle böyle yapın, bu segue mesaj göndererek hangi bilmek geçersiz kılmak gerekir:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {  
     if ([segue.identifier isEqualToString:@"ButtonSegueIdentifierOne"]) { 
      // button 1 
     } 
     if ([segue.identifier isEqualToString:@"ButtonSegueIdentifierTwo"]) { 
      // button 2 
     } 
}