2011-05-28 18 views

cevap

24

uygulama yalnızca bir UIWindow (genellikle true) varsa ve bu pencerenin sadece Subview (ayrıca genellikle doğru) kök kontrolörün görünümü ise:

[randomChildView.window.subviews objectAtIndex:0]

Veya nil numaralı görüntünün bulunduğu bir görünüm bulana kadar view.superview'u denetleyerek sıradüzenli olarak hiyerarşiden çıkabilirdiniz.

+0

hoşuma gidiyor. Şerefe. – dugla

+2

Bir "süper görüntü nil" olduğunu anlayacağınızı iki kez kontrol etmek isteyebilirsiniz. Bunu denedim ve sonsuz bir döngüde sıkışıp kaldım. – finneycanhelp

+0

Tırmanma alternatifi sadece birkaç önemsiz işlemci döngüsü gerektirir ve hiçbir şey almanıza gerek yoktur. Sonsuz bir döngü almıyorum. – TJez

11

Bu, süper görünüm hiyerarşisine doğrudan gitmek için önemsiz miktarda işlemci zamanı. Bu UIView kategorisinde var.

- (UIView *)rootView { 
    UIView *view = self; 
    while (view.superview != Nil) { 
     view = view.superview; 
    } 
    return view; 
} 

swift3/4

:

func rootSuperView() -> UIView 
{ 
    var view = self 
    while let s = view.superview { 
     view = s 
    } 
    return view 
} 
+1

Yönteminiz her zaman 'self.window' – DUzun

+0

Hayır değerini döndürür, hiyerarşide en yüksek UIView öğesini bulur. Tabii ki sadece self.window altındaki görünümlerde çalıştırırsanız, sadece self.window değerini döndürür. – TJez