2013-01-24 7 views
5

Ben UIViewController bir alt sınıfı vardır: Birden xib s ileTek UIViewcontroller, birden fazla xib arasında geçiş nasıl? , <pre><code>KBViewControllerQuerty~iphone.xib KBViewControllerDvorak~iphone.xib </code></pre> <p></p> Yani kullanıcının bir düğmeyi tıklatın:

@interface KBViewController : UIViewController 

, örneğin, biri Qwerty ve başka Dvorak düzenidir Qwerty, Dvorak'a geçer. Gördüğünüz gibi, kod mantığı her iki klavye düzeninde de aynıdır. İhtiyacım olan şey view'u başka bir xib ile yeniden yüklemektir.

Umarım, Dvorakxib tüm düğmeleri KBViewController yanıt IBOutlet s kanca olacaktır.

İki xib s arasında geçiş yapmanın doğru yolu nedir?

+0

farklı uçlu görünüm denetleyicisi yeniden başlatmak demek oluyor? Bunun mümkün olduğunu düşünmüyorum. eski olanı yenisiyle değiştirmeyi deneyin. –

+0

Kendim değiştirmek istiyorum.'KBViewController' görünümünde 'um' ve 'Dvorak' xib içindeki tüm düğmeler yanıt veren '' IBViewer '' '' KBViewController'' öğesine bağlanacaktır. – ohho

cevap

6

Tüm Öğeler, File's Owner olarak belirlenmiştir. IBOutlet ve IBAction bağlaması File's Owner'a göre yapılır. Böylece, her bir Nib dosyasının File's Owner tanımlı görüntü denetleyicisine ayarlanmış bir görünüm denetleyicisi ve iki Nibs tanımlayabilirsiniz. Eğer KBViewController tüm KBViewController * .xib dosyaların File's Owner ayarlayın ve initWithNibNamed yöntemi (yeniden görünümü denetleyicisi)

Eğer tarafından istiyorum .xib Eğer KBViewController * yük olabilir yerde bir KBViewController nesnesi varsa, olduğu

Tümüyle aynı KBViewController nesnesini korumalısınız, Nib olmadan bir KBViewController nesnesi oluşturabilirsiniz. KBViewController.m dosyasında, loadView uygulayın ve UIView nesnesini el ile -[NSBundle loadNibNamed] yöntemiyle yükleyin (program aracılığıyla otomatik olarak yükleyin ve değiştirin). Yukarıdaki kod

UIView *someView = [[[NSBundle mainBundle] loadNibNamed:@"SomeNibFile" 
                owner:self 
               options:nil] objectAtIndex:0]; 
self.view = someView; 

Not owner:self. @ "SomeNibFile" öğesinin File's Owner ile eşleşmelidir.

zaten yüklenmiş görünümünü değiştirmek için:

id superview = self.view.superview; 
[self.view removeFromSuperview]; 
UIView *someView = [[[NSBundle mainBundle] loadNibNamed:@"SomeNibFile" 
                owner:self 
               options:nil] objectAtIndex:0]; 
self.view = someView; 
[superview addSubview:self.view]; 

Daha detaylı açıklama: Resource Programming Guide - Loading Nib Files Programmatically

+0

Teşekkürler! Bu harika çalıştı. – SeanK

0

Elyaf dosyanızı elle yükleyebilir ve görünüm denetleyicinizin view özniteliğini değiştirebilir veya istediğiniz herhangi bir görünümü değiştirebilirsiniz. Eğer bir varsa

görünümünüzü yükledikten sonra, Tabii

self.view = someView; 

ayarlayabilirsiniz sizin ucu dosyasında tek UIView kök nesnesi olduğunda

UIView *someView = [[[NSBundle mainBundle] loadNibNamed:@"SomeNibFile" 
                 owner:self 
                options:nil] objectAtIndex:0]; 

objectAtIndex:0 sadece doğru Görünüm denetleyicinizde alt görünüm, sonra da bunu değiştirebilirsiniz.

+0

, yeni uçtaki denetimleri geçerli görünüm denetleyicisinin 'IBOutlet'lerine bağlar mı? – ohho

+0

Hayır, sanmıyorum ama KBView'larınız için bir UIView alt sınıfı yazmak ve xib dosyalarınızdaki her bir görünümü bu alt sınıfa bağlamak mümkün olacaktır. Daha sonra, alt sınıf "UIView" inizin bir görünümü ile bir "UIViewController" var ve kontroller alt sınıfa bağlı. Xib dosyalarınızın her ikisi de UIView alt sınıfınızın aynı kancalarına sahip olduğunda, istediğiniz gibi çalışmalıdır. – who9vy