Film şeridini kullanmak çok kolay. Eylemi "Çıkış" a sürüklemeniz yeterlidir. Ama bunu kodumdan nasıl aramalıyım?
Film şeridini kullanmak çok kolay. Eylemi "Çıkış" a sürüklemeniz yeterlidir. Ama bunu kodumdan nasıl aramalıyım?
Yanıtlar:
Gevşetmek için Segue Adını girin.
Sonra, - (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender.
segue tanımlamak ile.
Objective C ve Swift ile tam bir cevap:
1) IBAction
Hedef görünüm denetleyicinizde (seglamak istediğiniz yerde) bir gevşeme seguei oluşturun. Uygulama dosyasının herhangi bir yerinde.
// Objective C
- (IBAction)unwindToContainerVC:(UIStoryboardSegue *)segue {
}
// Swift
@IBAction func unwindToContainerVC(segue: UIStoryboardSegue) {
}
2) Kaynak görünümü denetleyicisinde (aradığınız denetleyici) exit + çıkmak için "Etkinlik adı" ndan sürükleyin. Açılır pencerede 1. adımda oluşturulan gevşeme sekmesini görmelisiniz. (Görmüyorsanız, birinci adımı inceleyin). Açılır pencereden unwindToContainerVC: öğesini seçin veya kaynak denetleyicinizi gevşetme IBAction'a bağlama yönteminizi adlandırdığınız her şeyi seçin.
3) Kaynak görünümü denetleyicisinin film şeridinin belge anahattında (altta listelenecek) sekmesini seçin ve bir tanımlayıcı verin .
4) Çözme segue adınızı değiştirerek, kaynak görüntüleme denetleyicisinden bu yöntemi kullanarak çözme segueini çağırın .
// Amaç C
[self performSegueWithIdentifier:@"unwindToContainerVC" sender:self];
// Hızlı
self.performSegueWithIdentifier("unwindToContainerVC", sender: self)
NB. Kaynak denetleyicisinde açıkta kalan özelliklere erişmek için çözme yöntemindeki segue parametresinin sourceViewController özelliğini kullanın. Ayrıca, çerçevenin kaynak denetleyicisinin işten çıkarılmasını işlediğine dikkat edin. Bunu onaylamak istiyorsanız, kaynak denetleyicisine öldürüldükten sonra tetiklenmesi gereken bir günlük iletisiyle bir dealloc yöntemi ekleyin. Dealloc çalışmazsa, tutma döngüsüne sahip olabilirsiniz.
(IBAction)unwindToContainerVC:(UIStoryboardSegue *)segue
ctrl+drag
gelen ViewController
etmek Exit
son derece yararlı oldu. Teşekkürler!
bradleygriffith
cevabı harikaydı. 10. adımı attım ve basitleştirme için bir ekran görüntüsü yaptım. Bu, Xcode 6'daki bir ekran görüntüsüdür.
unwind segue
kenar çubuğundan simgesini seçin :[self performSegueWithIdentifier:@"unwindIdentifier" sender:self];
UIViewController
. Sonra çözümünüz işe yarayacak
Sizi [self dismissViewControllerAnimated: YES completion: nil];
aramaya döndürecek şekilde kullandım ViewController
.
Apple'ın Çözme Segue Teknik Notundan metin alıntılama: Yalnızca programlı olarak tetiklenecek bir gevşeme segue eklemek için, sahnenin görünüm denetleyici simgesinden control + sürükleyip çıkış simgesine sürükleyin, sonra açılır menüden yeni segue için bir gevşeme eylemi seçin.
Vishal Chaudhry'nin cevabı benim için çalıştı. Ben de manuel kullanarak sekme tetiklemek için eklemek istiyorum:
[self performSegueWithIdentifier:@"mySegueName" sender:self];
ViewController içinden, film şeridinde ViewController Sahnesi altındaki çözme selamını seçmeniz ve RHS'deki özellikler görünümünde, Tanımlayıcı alanının yukarıdaki örnekte kodda ("mySegueName") bahsettiğiniz adı içermesini sağlamanız gerekir ).
Bu adımı atlarsanız, yukarıdaki satır sekme adının bilinmediği bir istisna atar.
İlgilenenler için ios6'dan önceki sürümlerde çalışacak geriye dönük uyumlu çözüm:
- (void)unwindToViewControllerOfClass:(Class)vcClass animated:(BOOL)animated {
for (int i=self.navigationController.viewControllers.count - 1; i >= 0; i--) {
UIViewController *vc = [self.navigationController.viewControllers objectAtIndex:i];
if ([vc isKindOfClass:vcClass]) {
[self.navigationController popToViewController:vc animated:animated];
return;
}
}
}
SWIFT 4 :
1. Çözmek istediğiniz denetleyicinin içindeki segue ile bir @IBAction oluşturun :
@IBAction func unwindToVC(segue: UIStoryboardSegue) {
}
2. Film şeridinde, işaretten çıkmak ve daha önce oluşturduğunuz yöntemi seçmek için ctrl + denetleyici işaretinden sürüklemek istediğiniz denetleyiciden denetleyin:
3. Artık belge ana hatlarında "Çözme segue ...." başlıklı yeni bir satır olduğunu fark edebilirsiniz. Şimdi bu satırı tıklamanız ve tanımlayıcıyı ayarlamak için nitelik denetçisini açmanız gerekir (benim durumumda unwindSegueIdentifier ).
4. Neredeyse bitti! Şimdi gevşemek istediğiniz görünüm denetleyicisini açmanız ve segue gerçekleştirecek bir yöntem oluşturmanız gerekir. Örneğin, düğmesi ekleyebilirsiniz ile kodla bağlayın @IBAction bundan sonra içine bu IBAction eklemek perfromSegue (withIdentifier: gönderen :) yöntemi:
@IBAction func unwindToSomeVCWithSegue(_ sender: UIButton) {
performSegue(withIdentifier: "unwindSegueIdentifier", sender: nil)
}
Tek yapmanız gereken bu!
Bunun storyboard aracılığıyla oluşturulmamış VC'lerle nasıl yapılacağını merak edenler için (bu soruya "programlı olarak" + "gevşeme segue" aramasından gelenler).
Programlı olarak bir gevşeme sekmesi ayarlayamadığınız göz önüne alındığında, sadece en basit programlı çözüm aramaktır:
navigationController?.popToRootViewController(animated: true)
yığıntaki tüm görünüm denetleyicilerini kök görünüm denetleyicinize geri getirir.
Gezinti yığınından yalnızca en üstteki görünüm denetleyicisini açmak için şunu kullanın:
navigationController?.popViewController(animated: true)
Bilginize: @ Vadim'in cevabının bir View Controller içinden çağrılan manuel bir gevşetme sekansı eylemiyle çalışması için şu komutu vermelisiniz:
[self performSegueWithIdentifier:(NSString*) identifier sender:(id) sender];
overDiden sınıfı yönteminin içinde viewDidAppear şöyle :
-(void) viewDidAppear:(BOOL) animated
{
[super viewDidAppear: animated];
[self performSegueWithIdentifier:@"SomeSegueIdentifier" sender:self];
}
ViewDidLoad veya viewWillAppear gibi diğer ViewController yöntemlerine koyarsanız yoksayılır.
performSegueWithIdentfier
tam olarak bunu yapar: bir ViewController'dan diğerine segue gerçekleştirmek