2009-04-10 21 views
7

NSPopUpButton'u kullanmanın ne kadar zor olduğunu anlamaya çalışıyorum. Kakao'da programlamak için en zor ve uzak kullanıcı elemanıdır (en azından bulduğum kadarıyla).NSPopUpButton, Bağlamalar ve kısalma ömrü

  • bir seri bağlantı noktasını gösterir Liman adında bir sınıf var şu şekildedir:

    aklımda var kullanıldığı durumdur.

  • Nitelikler arasında bir ad alanıdır.
  • NSPopUpButton'da her bağlantı noktası için ad alanını görüntülemek istiyorum.
  • Bir kullanıcı belirli bir bağlantı noktasını seçtiğinde, beklendiği gibi bir onay işareti ile açılır pencerede işaretlenir.
  • Kullanıcı daha sonra bir bağlantı düğmesine bastığında, Array'dan hangi Portların seçildiğini belirleyebilirim.
  • Kafamı bir kez döndürdüğümde, daha zarif bir çözüm olacağını düşündüğüm gibi, bağlama kullanarak bunu gerçekleştirmek istiyorum. Benim .m içinde

    NSMutableArray *allPorts; 
    Port *currentlySelectedPort; 
    

    ve bir eylem: Bu nedenle

benim AppController.h içinde ben muhtemelen özellikleri olarak oluşturmak ve sentezlemek iki niteliği bekliyorum

-(void)didSelectConnect:(id)sender{ 
    NSLog(@"Selected port name is:%@",[currentlySelectedPort name]); 
} 

yılında Port.h ve sadece bir pop up (ve bir etiket) içeren ve çeşitli makalelerin ardından, bir NSMutableArray'ı daha sonra değerleri görüntülemek için ArrayController kullanıp sonra da bir etiketin değerini ayarladığım elemanlarla doldurmayı başardım. bir nesne denetleyicisi kullanarak). Ancak, bu kadar akıllı olduğu sürece, uygulamaya çalıştığım kullanım durumuna uymuyor. Bu yüzden yardım

M

+0

Bağlantıları kullanmaya başlamadan önce göz önünde bulundurmayı düşünebilirsiniz. Daha fazla kod yazacaksınız, ancak bu kodun (ve KVO gibi arkasındaki tüm temel teknolojilerin), karmaşık örneklerdeki bağları gerçekten işe yaratabilmeniz için gerekli olduğunu anlıyorsunuz. –

cevap

11

Tamam burada açmak ihtiyacı iki şey vardır çünkü, NSPopUpButton ile bağlamaları biraz karmaşık şunlardır: a değerleri için bağlayıcı ve bu değerlerden biri seçilir kendisi için bağlayıcı . Onu daha da karmaşık hale getiren şey, bunu yapmak için birkaç meşru meşru yolun bulunmasıdır ve hangisini seçtiğiniz tamamen programınızın yapısına ve bir dereceye kadar kişisel tercihlere bağlıdır.

Değerlerin listesini almak için content özelliğini bağlarsınız. Durumunuza muhtemelen bunu NSArrayController'un arrangedObjects anahtarına bağlayabilirsiniz. Bu kurulumda, her menü öğesi bir nesneyi temsil eder. Varsayılan olarak, menü öğesinin başlığı, dizideki her öğeye description numaralı telefondan çağırarak döndürülen dizedir. Menü başlığı için farklı bir özellik kullanmak isterseniz, contentValues dizisini de bağlayabilirsiniz. Sadece contentValues için belirttiğiniz anahtar yolu onun ön ek olarak content için anahtar yolunu (örneğin, kısa contentValues için content ve arrangedObjects.name için arrangedObjects kullanabilir)

Bu, nesneleri temsil menü öğelerini verecektir sahip olduğundan emin olun. İhtiyacın olan şey seçili olanı tanımlamanın bir yoludur. Kullanabileceğiniz üç farklı bağlama vardır: selectedIndex, selectedObject ve selectedValue.Sırasıyla, kullanıcının seçtiği dizi nesnesinin dizinini, nesne değerini (content dizisindeki nesnelerden biri) ve seçili öğenin dize başlığını (bağlıysa contentValues dizisindeki nesnelerden birini temsil ederler. bu özellik).

Böylece, sizin durumunuza göre, denetleyici sınıfınızda selectedSerialPort özelliğine selectedObject bağlayabilirsiniz. Kullanıcı "Bağlan" düğmesini tıkladığında, sadece selectedSerialPort özelliğine başvurmanız gerekir.

6

sample Xcode project here'u karşıdan yükleyebilirsiniz. Bu, açıklamanıza ulaşabileceğim kadar yakın.

Önemli olan, dizi denetleyicisi, AppController ve açılır kutu arasındaki bağlantılara bakmaktır.

Temel olarak, bu sadece Alex'in söylediklerini gösterir.

+0

Abizem, Ben senin cevabını kabul etmeyi çok isterim. – Clokey

+0

allPorts dizinizi awakeFromNib'e kadar başlatmazsanız ne olur? NSPopUpButton'a değerleri yeniden yüklemesini nasıl söylerdiniz? – johnboiles

İlgili konular