2010-06-16 11 views
10

IB'de UIBarButtonItem öğesinin tanımlayıcısını bir oynatma düğmesinin (sağa dönük üçgen) görüntüsünü ekleyen 'oynat' olarak ayarlayabilirim.Bir UIBarButtonItem tanımlayıcısını programla değiştir (değil init)?

Bu resmi programlı olarak değiştirmenin bir yolu var mı? Oynat düğmesine basıldığında onu 'duraklat' olarak değiştirmek istiyorum.

UIBarButtonItem öğesini bir tanıtıcıyla başlatabileceğinizi biliyorum, ancak henüz başlatıldıktan sonra bunu değiştirmenin bir yolunu buldum. Bu mümkün mü?

Düşünebildiğim tek şey eski düğmeyi kaldırmak ve yerine yenisini yerleştirmektir, ancak bu pek de etkili görünmüyor.

Herhangi bir düşünce?

cevap

14

Ok Bu sorunun ölümüne neden girdim ve tam olarak aynı şeyi yaptıkları sample code from Apple'a girdim (bir araç çubuğu düğmesindeki oynatma/duraklatma düğmesi grafiği). Ancak, yerleşik oynatmayı kullanmak ve UIBarButtonItem tanımlayıcılarını duraklatmak yerine, özel bir UIButton kullanın ve özel görüntüleri değiştirin.

Yani eğer Elma oluşturma ve geçiş özel görüntüler bir UIButton üzerinde yerine oyuna inşa ve programlama yoluyla bir UIBarButtonItem ait tanımlayıcı değiştirmek için hiçbir yolu yoktur demek oldukça güvenli olduğunu düşünüyorum daha sonra UIBarButtonItem düğmelerini duraklatma sorun üzerinden gider.

Bu düğmeye basıldığında onlar (Elma) görüntüleri geçiş yapmak için ne yapıldığı:

// Call this when the button you want to toggle is pressed: 
[playButton setImage:((p.playing == YES) ? pauseBtnBG : playBtnBG) forState:UIControlStateNormal]; 

Eğer düğmeye durumunu saklamak üzere istediğiniz her türlü BOOL ile p.playing değiştirin. playButton, araç çubuğundaki özel UIButton'dur. pauseBtnBG ve playBtnBG geçiş yapılacak resimlerdir.

13

Bu oldukça iyi iş gibi görünüyor: Bu örnekte

UIBarButtonItem *oldButton = [myToolBar.items objectAtIndex:1]; 
[myToolBar setItems:[NSArray arrayWithObjects:[myToolBar objectAtIndex:0], [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemStop target:self action:@selector(tapStopRefreshButton:)],nil] animated:NO]; 
[oldButton release]; 

Bir UIWebView için bir araç çubuğu vardı ve birisi yükle tıklandığında o Stop değiştirmek istedim. Araç çubuğunda sadece esnek bir alan ve üzerinde bir düğme vardı - düğmeyi sağa hizalamak için - eski düğmeye bir referans attım, eski ile aynı seçiciyle yeni bir tane yaptım, sekme çubuğundaki düğmeleri sıfırla. ve sonra orijinal düğmeyi serbest bıraktı.

En güzeli değil, ancak tüm standart düğmeleri, düğme sınıfını geçersiz kılmak zorunda kalmadan kullanabilirsiniz.

+0

Apple bunu StitchedStreamPlayer örneğinde yapar: http://developer.apple.com/library/ios/#samplecode/StitchedStreamPlayer/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010092 – pablasso

+0

Teknik olarak ' OP'in peşinden “UIBarButtonSystemItem” değiştiğinde, bu cevap, bir sistem öğesinin bir diğeriyle * değiştirilmesine * izin verir. –

+0

Bu örnekte, yeni "UIBarButtonItem" diziye eklenmeden önce başlatılmış olsa da, düzgün bir şekilde serbest bırakılabilir. –

0

Yığılmış 2 araç çubuğu nedir? Daha sonra, üstteki sistem düğmelerinin ve alt kısımdaki diğer sistem düğmelerinin olabilir. Oynat düğmesine basılırsa, en üstteki araç çubuğunu gizleyin.

+0

Görüntüyü değiştirmek veya düğmeyi değiştirmek istiyor, bir araç çubuğunun kaybolmasını değil. – JoshDM

+0

@JoshDM Ancak, araç çubuğu kaybolursa, kullanıcıya gösterilen düğme değişecektir. Üstelik, bu durumlarda normalde bir tane değil, değiştirmek zorunda olduğunuz bir dizi düğme var. Böylece, UIButton'ları oluşturmak ve değiştirmek yerine standart UIBarButtonItem ile iki farklı araç çubuğuna sahip olmak daha kolay. Ayrıca bir görünümü 'gizlemek' daha kolaydır. Ama haklısınız, sorunun cevabı değildir, bu asker sorununa bir cevaptır. – FranMowinckel

İlgili konular