2012-11-25 15 views
13

Özel UIView içine bir UIButton koydum ve düğme herhangi bir dokunma olayı almıyor (vurgulanan duruma girmiyor, bu yüzden benim problemim değil yukarı işleyicide bir dokunuş yapamamak hakkında). Hem Interface Builder'da XIB'ye koymayı denedim hem de UIButton'u programlı olarak UIView'e ayrı ayrı eklemeyi denedim, ikisi de şanssızlıkla sona erdi. Tüm görüşlerim bir UIScrollView içinde, bu yüzden ilk UIScrollView onları engelliyor olabilir, bu yüzden ben de UIScrollView özel görünüm ekledim aynı şekilde programlı olarak bir düğme ekledim, ve düğme çalıştı, UIScrollView olasılığını ortadan kaldırabilir sebebi olmak.UIView içinde UIBiton UIBiton touch etkinliklerine yanıt vermiyor

ss

düğme resmi görünümüne bitti ve ön tabaka tamamen benim düğmeye işgal edilmez, bu yüzden beni fiziksel olarak düğme ile etkileşim olamaz için hiçbir neden yok: My görünümün hiearchy böyledir. Benim özel görünümün kod tarafında, ben gibi benim görünüm oluşturarak ediyorum: Ben setUserInteractionsEnabled tüm kombinasyonları denedim ve hiç şans yaşadım

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
     UIView *sub = [[[NSBundle mainBundle] loadNibNamed:@"ProfileView" owner:self options:nil] objectAtIndex:0]; 
     [self addSubview:sub]; 
     [sub setUserInteractionEnabled:YES]; 
     [self setUserInteractionEnabled:YES]; 
     CALayer *layer = sub.layer; 
     layer.masksToBounds = YES; 
     layer.borderWidth = 5.0; 
     layer.borderColor = [UIColor whiteColor].CGColor; 
     layer.cornerRadius = 30.0; 
     /*layer.shadowOffset = CGSizeZero; 
     layer.shadowRadius = 20.0; 
     layer.shadowColor = [[UIColor blackColor] CGColor]; 
     layer.shadowOpacity = 0.8; 
     */ 
    } 
    return self; 
} 

. (Evet, onları da Arabirim Oluşturucu'da işaretlenmiş olarak ayarlayın). Ben de 'YES' dönmek için 'canBecomeFirstResponder' geçersiz kılmayı denemeliyim benzer bir sorun ile başka bir soru okudum ve ayrıca bunu da yaptım. Ama sorun devam ederse, düğmeye basamıyorum. Düğme için herhangi bir özel özellik, ayarları vermedim, sadece normal olanı. Görünümdeki diğer nesnelerim (aşağıdaki etiketler, düğmenin arkasındaki resim görünümü vb.) Sorunsuz bir şekilde çalışıyor. Burada yanlış olan ne olabilir?

Sağol,

Can.

GÜNCELLEME: çalıştırın ve düğmesini tıklayın https://dl.dropbox.com/u/79632924/Test.zip Dene: İşte sorunun hızlı bir üreme olduğunu.

+0

Bu görünümü küçük test projesine ayırabilir misiniz? –

+0

Aptal soru: Düğmeyi IBAction'a bağlamayı hatırladın mı? –

+0

@HotLicks evet, bağlantılılar. Ancak sorun, olay işleyicisinin dokunduğunuzda ateş etmemesi ile ilgili değil, sorun düğmelerin hiç bir şekilde dokunma olaylarını almadığı (veya en azından yanıt veren) olacağıdır. –

cevap

18

deneme projesi bakınca Probleminizi TestView oluşturduğunuz şekilde düşünün, bunun için çerçeveyi belirtmezsiniz, bu nedenle temel olarak ana görünüm 0'dır ve XIB'den gördüğünüz alt görünümler ana görünümden dışarı uzanır ve bu nedenle yanıtlayıcı zincirinde hiçbir şey alamazsınız. .

TestView oluştururken çerçeveyi belirtmeli ya da XIB dosyasını yükledikten sonra çerçeveyi ayarlamanız gerekir.

+0

evet, test projesini yükledikten hemen sonra görmek çok daha kolaydı (test projesinde çok daha az şey olduğu için). şimdi düğmelerim bir çekicilik gibi çalışıyor! –

2

Çözümü buldum. Ben görünümün boyutta bir çerçeve ile yerine onu başlatıldı ettik

MyView *view = [[MyView alloc] init]; 

ve olaylara yanıt başladı: olarak benim özel bir görünüm başlatılırken

CGRect rect = CGRectMake(0,0,width,height); 
MyView *view = [[MyView alloc] initWithFrame:rect]; 
5

Bu sorunu da yaşadım. Benim için neden UIButton superview çerçevesinin 0 yüksekliğindeydi, bu yüzden bir dokunuşun gerçekleşmesine rağmen, düğmeye basılmadığına inanıyorum.

Düğmenin üst yüzeyinin bir çerçeve olarak daha büyük bir dikdörtgeni aldığından emin olduktan sonra düğme eylemleri çalıştı.

Bu sorunla ilgili temel nedenim hatalı bir otomatik düzen uygulamasıydı (düğmenin süper görünümü için yükseklik sınırını belirlemeyi unuttum).