Kısaca
Bir gevşeme segue (bazen çıkış segue olarak da adlandırılır ) itme, modsal veya popover sekmeleri arasında geri gitmek için kullanılabilir (gezinme öğesini gezinme çubuğundan atmış, popover'ı kapatmış veya kalıcı olarak sunulan görünüm denetleyicisini kapatmış gibi). Bunun da ötesinde, aslında sadece bir tane değil, bir dizi itme / mod / popover sekmesi ile gevşeyebilirsiniz, örneğin navigasyon hiyerarşinizde tek bir gevşetme eylemiyle "geri dön".
Bir gevşeme sekmesi gerçekleştirdiğinizde, gevşetmek istediğiniz görünüm denetleyicisinin bir eylem yöntemi olan bir eylem belirtmeniz gerekir.
Objective-C:
- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
}
Swift:
@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
}
Bu eylem yönteminin adı, film şeridinde gevşeme sekmesini oluşturduğunuzda kullanılır. Ayrıca, bu yöntem çözme segue yapılmadan hemen önce çağrılır. UIStoryboardSegue
Segue'i başlatan görünüm denetleyicisiyle etkileşime geçmek için (örn. Kalıcı görünüm denetleyicisinin özellik değerlerini almak için) kaynak görünüm denetleyicisini geçirilen parametreden alabilirsiniz. Bu açıdan, yöntem, yöntemiyle benzer bir işleve prepareForSegue:
sahiptir UIViewController
.
iOS 8 güncellemesi: Çözme segueleri, iOS 8'in Show and Show Detail gibi uyarlanabilir segue'leriyle de çalışır .
Bir örnek
Gezinti denetleyicisine ve üç alt görünüm denetleyicisine sahip bir hikaye tahtasımız olsun:
Green View Controller'dan, Red View Controller'a gevşeyebilirsiniz (geri dönebilirsiniz). Maviden Green'e veya Green yoluyla Red'e gevşeyebilirsiniz. Çözmeyi etkinleştirmek için, Kırmızı ve Yeşil'e özel eylem yöntemlerini eklemeniz gerekir; örneğin, Kırmızıdaki eylem yöntemi şöyledir:
Objective-C:
@implementation RedViewController
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
}
@end
Swift:
@IBAction func unwindToRed(segue: UIStoryboardSegue) {
}
İşlem yöntemi eklendikten sonra, çıkış simgesine kontrol sürükleyerek film şeridindeki gevşeme sekmesini tanımlayabilirsiniz. Burada düğmeye basıldığında Yeşil'den Kırmızı'ya gevşemek istiyoruz:
Gevşetmek istediğiniz görünüm denetleyicisinde tanımlanan eylemi seçmelisiniz:
Ayrıca Maviden Kırmızı'ya gevşeyebilirsiniz (bu, navigasyon yığınında "iki adım ötededir"). Anahtar, doğru çözme eylemini seçmektir.
Çözme segue gerçekleştirilmeden önce eylem yöntemi çağrılır. Örnekte, hem Yeşil hem de Mavi'den Kırmızı'ya gevşeme segue tanımladım. Eylem yöntemindeki çözme kaynağına UIStoryboardSegue parametresi aracılığıyla erişebiliriz:
Objective-C:
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
UIViewController* sourceViewController = unwindSegue.sourceViewController;
if ([sourceViewController isKindOfClass:[BlueViewController class]])
{
NSLog(@"Coming from BLUE!");
}
else if ([sourceViewController isKindOfClass:[GreenViewController class]])
{
NSLog(@"Coming from GREEN!");
}
}
Swift:
@IBAction func unwindToRed(unwindSegue: UIStoryboardSegue) {
if let blueViewController = unwindSegue.sourceViewController as? BlueViewController {
println("Coming from BLUE")
}
else if let redViewController = unwindSegue.sourceViewController as? RedViewController {
println("Coming from RED")
}
}
Gevşetme aynı zamanda itme / modal sekansların bir kombinasyonu yoluyla da çalışır. Örneğin, kalıcı bir sekmeli başka bir Sarı görünüm denetleyicisi eklersem, sarıdan tek bir adımda Kırmızıya kadar gevşeyebiliriz:
Koddan Çözme
Bir şeyi görünüm denetleyicisinin Çıkış sembolüne sürükleyerek bir gevşeme sekmesi tanımladığınızda, Belge Anahattı'nda yeni bir segue görünür:
Segue'in seçilmesi ve Nitelikler Müfettişine gidilmesi "Tanımlayıcı" özelliğini gösterir. Segue'inize benzersiz bir tanımlayıcı vermek için bunu kullanın:
Bundan sonra, gevşetme seguei tıpkı diğer segueler gibi koddan gerçekleştirilebilir:
Objective-C:
[self performSegueWithIdentifier:@"UnwindToRedSegueID" sender:self];
Swift:
performSegueWithIdentifier("UnwindToRedSegueID", sender: self)
dismissViewControllerAnimated:completion:
veyapopViewControllerAnimated:
başaramıyorlar mı?