2013-08-19 25 views

cevap

19

Sen UINavigationControllerDelegate protokolünü kullanır ve sonra tanımlayabilirsiniz böylece hedef denetleyicisi bir yöntemi yazabilir ve burada diyoruz Delegeler, gösterildiği gibi, seguelerin tamamlanmasından haberdar olmak için. Seferi izlemek için başka bir mantıksal yer AppDelegate olabilir. bir görünüm denetleyicisinden bunu yapmanın

Örnek

(kısaca VC):

class MyViewControllerSubclass : UIViewController, UINavigationControllerDelegate { 

    func viewDidLoad() { 
     self.navigationController.delegate = self 
    } 

    func navigationController(navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) { 
     println("Did show VC: \(viewController)") 
    } 
} 

Ancak VC segue tamamlandığında sadece gösterir, olarak VC olur viewWillAppear() veya viewDidAppear() temsilci yöntemleri sunulmak; ancak, hedef VC'nin un -presandığı zaman hakkında bilgi vermezler.

İzlediğiniz VC'de, VC'nin (ve belleğinin) ayrıldığını veya viewWillDisappear() yöntemini geçersiz kıldığını belirlemek için aşağıdakini ekleyebilirsiniz.

deinit { 
    println(__FUNCTION__, "\(self)") 
} 
+0

Beklediğim kadar kötü değildi. self.navigationController = self; 've bu yöntemi ekleyin. Denetleyicileri Segue Kimliğine bağlı olarak yerel değişkenlere kaydettim ve sonra bu değerleri "ViewController" işlevine geçirdim. –

+7

Bu, kaynak görüntüleme denetleyicisinin bir gezinme denetleyicisine sahip olduğu itme istifleri için çalışacak, ancak modal seferi durumunda ne yapılmalı? – Drux

+1

Ben Levi gelen özel Segue cevabı kullanılmış ve burada örnekteki gibi benim 'perform' uygulamaya: http://stackoverflow.com/a/23778394/586489 Bu benim itme tamamlandığında bilir ve segues kullanabilirsiniz, oldukça güzel çalışıyor. –

14

viewDidAppear: yöntemini kullanmak istemiyorsanız, özel bir istek oluşturabilirsiniz. perform yönteminde geçiş için bir animasyon kullanırsınız ve bu da bir tamamlama bloğuna sahip olabilir. Animasyon tamamlandıktan sonra kodu buraya ekleyebilirsiniz.

+0

Öyleyse Storyboard'daki standart sürükle ve bırak segue ile mümkün değil mi? – hakonbogen

+2

Bunu nasıl oluşturursunuz, ancak UIStoryboardSegue alt sınıfını almanız ve "perform" yöntemini uygulamanız gerekir. Bundan sonra, 'storyboard'da', segue sınıfını yeni oluşturduğunuz birime ayarladınız. – Levi

-9

kullanabilirsiniz - (void) prepareForSegue: (UIStoryboardSegue *) segue gönderen: (id) gönderen

bir segue kaynağı UIViewController yapılır hemen önce bu yöntem çağrılır

. UIViewController hedefinde bir kod yapmak istiyorsanız, segue hedef viewcontroller alabilirsiniz.

Ayrıca bu kodu desintation viewController'da viewdidAppear'da da ekleyebilirsiniz.

-9

prepareForSegue yönteminde UIViewController hedef yöntemini çağırabilirsiniz. Burada

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    NSLog(@"prepareForSegue: %@", segue.identifier); 

    if ([segue.identifier isEqualToString:@"Happy"]) { 
     [segue.destinationViewController setHappiness:100]; 
    } else if ([segue.identifier isEqualToString:@"Sad"]) { 
     [segue.destinationViewController setHappiness:0]; 
    } 
} 

setHappiness yöntem hedef Kontrolör ve burada 100 orada geçmektedir.

– navigationController:didShowViewController:animated: 
+3

Bu gerçekten gerçek segue ne zaman tamamlandığını gösteren değil - bu segue başlangıcında olur – Sam

7

Swift olarak, UIViewController alt sınıf sizi UINavigationController örneğini alabilir ve ayarlayın:

İlgili konular