2010-03-19 18 views
7

Başlık az çok açıklıyor. Bir touchesBegan olaya tepki olarak, benim UIViewController recolours kendisini ve bazı subviews ekler.Dokunuşları almayanlarEnded/Taşındı/SubView ekledikten sonra iptal edildiGörünüm

touchesEnded'u asla almaz. katma subviews olay bir şekilde müdahale çünkü sanırım. Ben boşuna subviews üzerinde resignFirstResponder aramayı denedim.

Çocuk görünümlerini eklemediğimde ve dokunma olayı normal olarak adlandırıldığında kod düzgün çalışıyor.

Herhangi bir fikrin var mı?

Teşekkür

DÜZENLEME: ayrıntı Bit ve nasıl düzelttim.

Temel olarak, altyazıya dokunduğumda, alt görünüme dokunduğumda olay ana görünüme aktarılacaktı, ancak bu olayda alt görünümleri kaldırıyor ve yerlerine yenilerini ekliyordum. Dokunmatik artık var bir subview üzerinde kökenli olması dokunma geri kalanı kayıp anlamına geliyordu. Hiç

+2

tüm kodlar? +++++ – kennytm

+0

Hmmm, kod oldukça karmaşık, ama ben buraya postalamak için mümkün olan en basit örnek kodladı ve Tamam çalıştı ... böylece doğru yönde dürtmek için +1 ... ........ Ben subviews ya olayı almazlar farkı – Sam

cevap

8

bir subview eklemeden önce subview için HAYIR konumuna userInteractionEnabled özelliğini ayarlamak çalıştı mı?

+0

hayır, bu umut verici geliyor, deneyecek ... – Sam

+0

Belki bazı alt (lar) bu olayları kötü biçimlendirilmiş -touchesEnded: withEvent uygulayarak tüketmiş olabilir? – ZhangChn

1

Böyle bir şey kullanarak Superview üzerine subview gelen dokunmatik geçmesi ihtiyacımız olacak subviews karşı test alma rötuşları durdurmak için, ustam görünümünde withEvent:

Ben hitTest geçersiz kılarak bu sabit:

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

    [super touchesBegan:touches withEvent:event]; 
} 
+0

anladım zaman yayınlayacağız. TouchesBegan olayının meydana geldiği yere bir alt görünüm eklerseniz, alt ekranın veya süper görüntünün aldığı Mesajlar/Kapanmış/Sona Erdi – Sam

+3

Bu, dokunmayı superCLASS'e değil, superVIEW'a geçirir. ;) – Pascal