2015-03-15 19 views
14

Mevcut iç içe geçmiş sınıflar SuperView ve NestedView.Yuvalanmış özel görünüm sınıfı nasıl belirlenir?

class SuperView : UIImageView { 

    class NestedView : UIImageView { 
     var text : String = "Nested View" 
    } 

    var text : String = "Super View" 
    var nested : NestedView? 

} 

Ben film şeridi sahnenin müfettiş içindeki değer "NestedView" Bir UIImageView için "Özel Sınıf Adı" adlı özelliğini ayarlamak istiyoruz. Ancak Interface Builder, "NestedView" sınıfını bulamadı. Swift olarak

enter image description here

+1

İç içe geçmiş türlerin başka bir yerde nasıl çalıştığına bağlı olarak beklentim, sınıfı "SuperView.NestedView" olarak atamanız olabilir, ancak arayüz oluşturucu buna izin vermez. Bence bu, küçük, amaca uygun olarak oluşturulmuş alt görünümlerin adlarının çıkarılması için harika bir özellik olacaktır. –

cevap

11

Şu anda, ben Arayüz Oluşturucu sadece Objective-C sınıflarının isimleri tanıdığını düşünüyorum. Hala Arayüz Oluşturucu @objc anahtar kelime ile iç içe geçmiş bir sınıf bulmak yapabilirsiniz:

class SuperView: UIView { 
    @objc(SVNestedView) class NestedView: UIImageView { 
    } 
} 

Sonra Interface Builder, bakış inci sınıf SVNestedView ait olduğunu belirtin. Objective-C ad alanı olmadığı için, yine de her yuvalanmış sınıf için benzersiz adlar seçmeniz gerekir, ancak en azından Swift tarafı düzgün olarak adlandırılır.

+0

Teşekkürler, bu çok kullanışlı! –

+3

Bu, Xcode 8.1'de Swift 3 ile çalışmıyor gibi görünüyor. Hala IB'de "SVNestedView" göremiyor – oleynikd

0

, bir iç sınıfın bir örneği, dış sınıfının herhangi bir örneğinin bağımsızdır. Swift'deki tüm iç sınıflar, Java'nın statik kullanılarak bildirilmiş gibidir.

Bu sınıf tasarımının sizin ihtiyacınıza uygun olduğunu sanmıyorum. Yapmanız gereken şey, görünümünüzün dışına yeni bir sınıf oluşturmanız ve bir çeşit kompozisyon oluşturmanızdır. Bu kesinlikle sizin için çalışacaktır. İşte

kodunuzu bazı değişikliktir:

class SuperView : UIImageView { 
    var text : String = "Super View" 
    var nested : NestedView = NestedView() 
} 

class NestedView : UIImageView { 
    var text : String = "Nested View" 
} 
İlgili konular