StoryBoard Kimliği nedir ve bunu nasıl kullanabilirim?


110

IOS geliştirmede yeniyim ve yakın zamanda Xcode 4.5 ile başladım. Her viewController için film şeridi kimliği dahil bazı kimlik değişkenlerini ayarlayabileceğimi gördüm. Bu nedir ve nasıl kullanabilirim?

görüntü açıklamasını buraya girin

Stackoverflow'u aramaya başladım ve bunun için herhangi bir açıklama bulamadım. Denetleyicimi hatırlamak için ayarlayabileceğim sadece aptal bir etiket olmadığını varsaydım, değil mi? Bu ne işe yarıyor?

Yanıtlar:


132

Film şeridi kimliği, bu film şeridi ViewController'ı temel alan yeni bir ViewController oluşturmak için kullanabileceğiniz bir Dize alanıdır. Herhangi bir ViewController'dan örnek bir kullanım olabilir:

//Maybe make a button that when clicked calls this method

- (IBAction)buttonPressed:(id)sender
{
    MyCustomViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];

   [self presentViewController:vc animated:YES completion:nil];
}

Bu, "MyViewController" adını verdiğiniz storyboard ViewController'ı temel alan bir MyCustomViewController oluşturacak ve onu geçerli Görünüm Denetleyicinizin üzerinde sunacaktır.

Ve uygulamanızın temsilcisindeyseniz,

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
                                                         bundle: nil];

Düzenleme: Swift

@IBAction func buttonPressed(sender: AnyObject) {
    let vc = storyboard?.instantiateViewControllerWithIdentifier("MyViewController") as MyCustomViewController
    presentViewController(vc, animated: true, completion: nil)
}

Swift> = 3 için Düzenle:

@IBAction func buttonPressed(sender: Any) {
    let vc = storyboard?.instantiateViewController(withIdentifier: "MyViewController") as! ViewController
    present(vc, animated: true, completion: nil)
}

ve

let storyboard = UIStoryboard(name: "MainStoryboard", bundle: nil)

Bunu deneyelim ve nasıl elde edersinizself.storyboard
RTB

self.storyboard'a herhangi bir görünüm denetleyicisinden erişilebilir. Görebilmeniz için cevabımı şimdi düzenleyeceğim
Eric

Peki ya AppDelegate'imden veya başka bir sınıftan erişmem gerekirse?
RTB

Film şeridine herhangi bir dosyadan nasıl erişileceğini gösteren başka bir düzenleme eklendi.
Eric

1
self.storyboardbir film şeridinden yüklenen herhangi bir görünüm denetleyicisinden erişilebilir. Görünüm denetleyicisi bir film şeridinden yüklenmediyse, bu özellik sıfırdır.
rob mayoff

13

Eric'in cevabına eklemek ve Xcode 8 ve Swift 3 için güncellemek için:

Bir film şeridi kimliği, adın ima ettiği şeyi tam olarak yapar: tanımlar. Sadece bir film şeridi dosyasında bir görünüm denetleyicisini tanımlar . Film şeridi, hangi görünüm denetleyicisinin hangisi olduğunu bilir.

Şimdi, adıyla karıştırmayın. Film şeridi kimliği, bir 'film şeridi'ni tanımlamaz. Apple'ın belgelerine göre bir film şeridi, 'uygulamanızın kullanıcı arayüzünün tamamı veya bir kısmı için görünüm denetleyicilerini temsil eder.' Bu nedenle, aşağıdaki resim gibi bir şeye sahip olduğunuzda, her birine bir storyboard kimliği (film şeridindeki kimlikleri) verilebilen iki görünüm denetleyicisine sahip Main.storyboard adında bir storyboard'unuz olur.

görüntü açıklamasını buraya girin

Bu görünüm denetleyicisini başlatmak ve geri döndürmek için bir görünüm denetleyicisinin film şeridi kimliğini kullanabilirsiniz. Daha sonra, istediğiniz gibi manipüle etmek ve sunmak için devam edebilirsiniz. Eric'in örneğini kullanmak için, bir düğmeye basıldığında 'MyViewController' tanımlayıcısına sahip bir görünüm denetleyicisi sunmak istediğinizi varsayalım, bunu şu şekilde yaparsınız:

@IBAction func buttonPressed(sender: Any) {
    // Here is where we create an instance of our view controller. instantiateViewController(withIdentifier:) will create an instance of the view controller every time it is called. That means you could create another instance when another button is pressed, for example.
    let vc = storyboard?.instantiateViewController(withIdentifier: "MyViewController") as! ViewController
    present(vc, animated: true, completion: nil)
}

Lütfen söz dizimindeki değişiklikleri not edin.


Sarı uyarı simgesi, ikinci görüntü denetleyicisinin hiçbir giriş noktası ve / veya kimliğine sahip olmadığı gerçeğinden kaynaklanmaktadır. Bu, bir film şeridi kimliği verilerek veya film şeridindeki başka bir görüntü denetleyicisine bağlanarak ele alınabilir. Bu şekilde, film şeridi ona nasıl ulaşılacağını ve tanımlanacağını bilir.
Taiwosam

Storyboard ID alanını bulamadım, bu yüzden resim için teşekkürler. Xcode 9'da da aynı konumda
Isaac Bosca
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.