2010-12-02 16 views
9

UIView özelliği olan bir sınıf var. Bazen bir UILabel'den geçiyorum; Bazen bir UITextField. Hangi içeri girsem de, dersi metnin oluşturmasını istiyorum.UIView uyarısı nasıl durdurulur seçiciye yanıt vermeyebilir

if ([self.viewToUpdate respondsToSelector:@selector(setText:)] && !self.newAnswer) 
    [self.viewToUpdate setText:[[self.choices objectAtIndex:indexPath.row] text]]; 

sorundur bile respondsToSelector kontrol ediyorum da, Xcode benim UIView setText: cevap olacağını bilmediği için, bu, bir uyarı verir: Şu anda çalıştığı, bu yapıyorum. Bu uyarıyı nasıl kaldırabilirim?

Özel olarak bir TextField veya Label olup olmadığını kontrol edip, sonra da bir TextField veya Label'a yayınlama yapabildiğimi biliyorum, ancak bu bir acı olur ve daha fazla görüntüleme türüne sahip olursam, Her biri için birkaç tane daha kod satırı eklemem gerekiyor.

Ben viewToUpdate için türü olarak kimliğe sahip kendi protokol oluşturma ve sonra benim sınıf olması hakkında düşünce ... ama tabii UITextField ve UILabel sadece denemek döküm ... o protokole

cevap

16

uygun olmaz Bir kimlik olarak:

if ([self.viewToUpdate respondsToSelector:@selector(setText:)] && !self.newAnswer) 
    [(id)self.viewToUpdate setText:[[self.choices objectAtIndex:indexPath.row] text]]; 
+0

Teşekkürler! Bunu düşünmediğime inanamıyorum. Çok basit! Her ne kadar (id) ikinci hatta konulmalı, ilk değil. – GendoIkari

+0

whoops, iyi haber! Sadece değişikliği yaptım. –

+0

Nesnenin, olmasını beklediğiniz sınıfta olduğunu belirlemek için sınamak, daha sonra doğrudan kimliğe dökülmekten ziyade, o belirli bir sınıfa yayın yapmak için daha iyisini yaparsınız. En azından self.viewToUpdate'in şimdi olduğundan farklı bir sınıf olması durumunda bir çarpışmayı önlersiniz. – Ryan