2010-07-03 23 views
96

Tamam, bazı varsayılan metinleri "başlatmak için tıkla" görüntüleyen bir arayüz oluşturucuda oluşturulmuş bir UILabel var. Etiketin üzerindeki metni günceller -(IBAction)next; yeni bir şey söylemek: Kullanıcı UILabel hafifçe dokunduğundaUILabel'de Touch Event'i işleme koyup bir IBAction'a çektirme

Bunun bir IBAction yöntemi tetiklemek istiyorum.
Bu yöntem benim yöntemimden bir bağlantıyı etiketime sürüklememi ve ardından bir düğmeyle birlikte içeride dokunmamı sağlaması gerçekten çok kolay olurdu. ama alas, puro yok.

Her neyse, sanırım sorum şu ki, bunu işe almak için UILabel alt sınıfına mı gideceğim? Veya bir şekilde etiket üzerindeki bir düğmeyi sürükleyebilirim, ancak% 0 opak hale getirebilirim. Yoksa eksik olduğum daha basit bir çözüm var mı?

cevap

252

kontrol edin:

UILabel *label = ... 
label.userInteractionEnabled = YES; 
UITapGestureRecognizer *tapGesture = 
     [[UITapGestureRecognizer alloc] initWithTarget:self 
               action:@selector(labelTap)]; 
[label addGestureRecognizer:tapGesture]; 

hüner kullanıcı etkileşimini sağlamaktır.

+1

Birden çok etiketim varsa ne olur? hangisine dokunulduğunu nasıl ayırt edebilirim? – learner

+1

@learner etiket özelliğini deneyin. labelTap'ı kullandığınızdan emin olun: labelTap yerine. ve - (void) labelTap: (id) göndereni kullanın. gönderici @thedjaney – thedjaney

+1

değil UILabel – h4labs

70

UILabel, UIResponder'den alınan UIView öğesinden devralınır. Tüm UIresponder nesneleri dokunmatik olayları ele alabilir. (UILabel içerir) görünümünüze bilen sınıf dosyasında Yani uygulamak:

-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event; 

UILabel en etiket değerini ayarlamak arayüz oluşturucu olarak.

UITouch *touch = [touches anyObject]; 

if(touch.view.tag == MY_TAG_VAL) 
label.text = @"new text"; 

Sen arayüz oluşturucu UILabel nesneyle sınıf dosyasında kodunuzu bağlamak ile UILabel örnek değişkeni bildirerek: dokunuşlar senin touchesBegan yönteminde ortaya çıktığında, etiket ait olduğu bakış etiket değerini kontrol IBOutlet öneki: Arabirim oluşturucusunda bunları bağlayabilirsiniz. Daha sonra arabirim oluşturucusunda bunları bağlayabilirsiniz.

+0

hızlı ve basit, Çok teşekkürler, bana ciddi zaman kazandırdın. – wbarksdale

+31

Bir not, arayüz oluşturucuda "Kullanıcı Etkileşimi Etkinleştirildi" seçeneğini işaretlediğinizden emin olmalısınız, aksi takdirde bu çalışmaz. – midas06

+0

Bu yöntemle bir sorunla karşılaştım. Görünüm denetleyicisi doğrudan yüklendiğinde iyi çalıştı, ancak bir nav denetleyicisi oluşturduğumda, etiketi içeren denetleyiciyi nav denetleyicisine itti ve görüntüledi, dokunuşlar artık etikete gitmiyor gibi görünüyor. Herhangi bir fikir? – midas06

30

UIButton kullanabilirsiniz, bunu şeffaf hale getirin, ör., Resimsiz özel tipte ve üzerine UILabel (ortalanmış) ekleyebilirsiniz. Ardından normal düğme olaylarını bağlayın.

+0

Katılıyorum, özel düğme türü size bir UILabel tipi kullanıcı deneyimi vermelidir. – stitz

+2

+1, güzel ve basit. Bunu daha önce çalışmamış olan opactiy 0 için normal bir düğme ayarlayarak denedim, ancak türünü özel olarak değiştirmek için ipucu mükemmel çalıştı. –

+0

Opaklık, düğmeyi ve tüm alt görünümlerini etkileyecek, böylece opacity = 0, tüm şeyi görünmez hale getirecektir. – Eiko

6

Swift

3 Sen kullanıcı etkileşimini sağlamak ve

label.isUserInteractionEnabled = true 
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(userDidTapLabel(tapGestureRecognizer:))) 
label.addGestureRecognizer(tapGesture) 

Ve nihayet bir jest tanıyıcı eklemek

@IBOutlet var label: UILabel! 

hangi bir IBOutlet dokunun işlemesi

func userDidTapLabel(tapGestureRecognizer: UITapGestureRecognizer) { 
    // Your code goes here 
}