Soru Navigasyon geri düğmesiyle segeyi gevşet


Ana ekranın üzerindeki özel düğmeleri kullanarak demoda seggs bölümü ile storyboard uygulamasında apple demo videosunu izledim ve demoyu izledim. Bu iyi çalışıyor.

Aynı zamanda burada da çalışan aynı şeyin güzel bir örneğini gördüm. http://www.techotopia.com/index.php/Using_Xcode_Storyboarding_%28iOS_6%29#Unwinding_Storyboard_Segues

Bununla birlikte, ebeveynden (ana form verileri ile) çocuğa (gelişmiş ayar seçenekleriyle) normal bir itme segueine sahip olmak ve ardından özel bir düğmeyle değil, gezinme çubuğundaki geri düğmesini kullanarak ana görünüm denetleyicisine dönmek istiyorum. demoda gösterildiği gibi görünüm. Ebeveyn denetleyicisi, ana denetleyicideki başka bir kaydetme düğmesine basıldığında her şeyi bir API sunucusuna kaydedecektir.

Gezinme geri düğmesini iptal etme isteğimi geçersiz kılmaya çalışmıyorum ve geri düğmesi storyboard'da görünmediğinden, yeşil Çıkış düğmesini sürükleyemiyorum

Bunu eylemi geçersiz kılmak için viewDidLoad'da denedim, ancak işe yaramadı [self.navigationItem.backBarButtonItem setAction: @selector (unwindSegueAction :)];

Bir itme segmesinin arka düğmesiyle gevşetilmesi mümkün mü?

Şimdiye kadar gördüğüm en iyi fikir, viewDidLoad yönteminden geri düğmeyi geçersiz kılmaktı, ancak bu, açılı arka düğme stilini kaldırıyor ve aynı zamanda basit bir soruna kaba bir hack gibi görünüyor.

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStyleBordered target:self action:@selector(unwindSegue:)];

Protokol ve delegeleri kullanmak için cevaplar olduğunu biliyorum, ancak Xcode4.5 unwind segue metodunu kullanmak istiyorum.


31
2017-11-25 14:09


Menşei




Cevaplar:


Sonunda, navigasyon kontrol cihazını takip ederek ana kontrolör metotlarına referans alabilmem için segue gevşemeye gerek duymadım.

Aşağıdakileri yaparak bir referans elde edebildim - (void)viewWillDisappear:(BOOL)animated çocuk denetleyicinin yöntemi

NSInteger currentVCIndex = [self.navigationController.viewControllers indexOfObject:self.navigationController.topViewController];

FirstViewController *parent = (FirstViewController *)[self.navigationController.viewControllers objectAtIndex:currentVCIndex];

parent.barcodeType = indexPath.row;

ayar değişkenini orijinal kontrol ünitesine mükemmel bir şekilde geçti.

Ayrıca çocuk denetleyicinin üstündeki ana denetleyiciye bir ithalat referansı ekledim


14
2017-11-26 11:35



İyi bir fikir, görüş kontrolcünüz de ileri gidebilirse sorun olabilir. Ya da bunun üzerinde tetiklenebilecek başka bir modeliniz varsa. - Daniel
Aynı problemim var, Swift kullanıyorum. Yukarıdaki çözümü Swift'de sağlayabilir misiniz? Teşekkürler! - Raghavendra
Hayat kurtarıcı. Teşekkürler dostum. - GeneCode


@Alan doğru yolda. İlk görüş kontrol cihazına geri dönmediğiniz zaman segue'in ateş etmesini önlemek için bir test eklemeniz yeterlidir. ViewWillDisappear'da böyle bir şey, bir geri düğmesi için gevşetme isteğini gerçekleştirmenize izin verecektir. Sınıftan aşağı çıkış simgesine sürükleyerek bir manuel açma segue oluşturmanız gerekecektir. Oluşturduktan sonra adlandırdığınızdan emin olun.

UIViewController *vc = self.navigationController.topViewController;
if ([FirstViewController class] == [vc class])
{
    [self performSegueWithIdentifier:@"unwindSegue" sender:self];
}

6
2017-10-15 01:12





Yukarıdaki @Chuck H önerisini takip eden bir Swift çözümü eklemek istiyorum:

let rootVC = self.navigationController!.topViewController
if rootVC.isKindOfClass(TheNameOfYourViewController) {
    performSegueWithIdentifier("yourNamedSegueIdentifier", sender: self)
}

5
2017-09-04 13:57





Göz önünde bulundurmayacağınız bir alternatif, ebeveynin çocuğa bir delege olmasını ve ebeveynin güncellenmesi için çocukta delege yöntemlerini kullanmasıdır.

Böylelikle navigasyona ekleme ihtiyacını atlatacaksınız, çünkü ebeveyn zaten geri döndüğünüz andan itibaren güncel.


1
2017-12-16 17:23