2014-09-12 19 views
34

Düğmelerden oluşan bir yatay kaydırma görünümü var. Son derece hızlı bir kaydırma yapmazsam kaydırma görünümü kaymaz.ios 8 - yatay kaydırma görünümündeki butonlar pan olayını durdurma - kaydırma çalışmıyor

Düğmeleri userInteractionEnabled = NO olarak ayarlarsanız, kaydırma işlemi beklendiği gibi çalışır, ancak elbette düğmeler hiç çalışmaz.

Bu uygulama iOS 7 ve daha önce iyi çalıştı. Bir iOS 8 "özelliği" gibi görünüyor. Düğmenin sürükleme olayını yakalayabildiğimi fark ettim, ancak onu tekrar kaydırma menüsüne nasıl yönlendireceğimi bilmiyorum.

Düğmelerimi UIViews ile değiştirmem ve olayları kendim yönetmem gerektiğini düşünüyorum, ancak başka fikirleri veya çözümleri olduğunda minnettar olurum.

+0

Henüz bir çözüme sahip değilim ama fark ettim ki, aynı sorunu yaşıyorum. Bir tane bulduğumda bir çözüm gönderecek. –

+0

FWIW, UILabels olacak düğmeleri yeniden yazdım ve sadece bir UITapGestureRecognizer ile yönetildim. Apple forumlarında iOS8 beta kategorisinde bu hataya ilişkin bazı yorumlar var. –

+0

Oops, Bir çözüm buldum, ancak postalamayı unuttum. Ne yaptığınızı basitleştirmek istiyorsanız, küçük bir "UIScrollView" alt sınıfı yayınlayacaktır. –

cevap

8

Bu sorunu gidermek için UIScrollView alt sınıfını oluşturdum. Sadece o bu yöntemi gerekir:

- (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view 
{ 
    UITouch *touch = [touches anyObject]; 

    if(touch.phase == UITouchPhaseMoved) 
    { 
     return NO; 
    } 
    else 
    { 
     return [super touchesShouldBegin:touches withEvent:event inContentView:view]; 
    } 
} 

Sonra sadece birini kullanıyorsanız ve gitmek iyiysen Film şeridinde sizin alt sınıfa sınıf ayarlamayı unutmayın.

+0

Bu sorunum giderildi. Teşekkürler! – ethanneff

+0

Sabit benim de - kaydırma görünümünde gömülü bir UISegmentedControl ile. Çok teşekkürler! –

+2

Bunu denedim ve UIScrollView'ı düzeltti, ancak bazen düğmelerim ilk dokunuşta yanıt vermiyor, aynı davranışı gören başka biri var mı? – Leonardo

24

Bu sorunu, üzerinde UIButtons'lu özel UITableViewCells bulunan bir UITableView ile yaşadım. Bunu UITableview sınıfıma koydum.

Sorunumu çözdüm.

DÜZENLEME: Sadece ayırmak için UIScrollview'ın bir alt sınıfını oluşturabilir ve sorunu çözmek için bunu ekleyebilirsiniz.

+0

Bu doğru çözüm gibi görünüyor.TouchedShouldBegin: yöntemini denedi ve sürekli olarak düğme musluğunu tanıdığı sorunları vardı (Leonardo tarafından belirtildiği gibi) – Scotty

+0

Bu da benim için çalıştı. –

+0

Bu en iyi çözümdür. –

10

Bu kesmek benim için çalışıyor:

UITapGestureRecognizer *nothingTap = [[UITapGestureRecognizer alloc] init]; 
nothingTap.delaysTouchesBegan = YES; 
[_scrollView addGestureRecognizer:nothingTap]; 

kredisi: https://devforums.apple.com/thread/241467 Ben iOS 8'de, UIScrollView en temel UIPanGestureRecognizer UIScrollView en delaysContentTouches özelliğini saygı olmadığını tespit

+0

Teşekkür ederiz! Bir çekicilik gibi çalışır - ve günümü kurtardı! – Wirsing

+0

iOS 5.1'i desteklemeniz gerekmiyorsa bu özellik çalışır. Daniel'ın çözümü benim için tahtada çalıştı. – Inertiatic

+0

Aslında benim için çalışan tek çözüm. İlginç. – Leandros

38

. Bunu bir iOS 8 hatası olarak kabul ediyorum. İşte benim geçici çözüm var:

theScrollView.panGestureRecognizer.delaysTouchesBegan = theScrollView.delaysContentTouches 
+10

Düzeltme işleri, ancak bir sorun var: kullanıcı parmağını düğmeye bastığında "vurgulanan" düğme görüntüsü görüntülenmiyor. –

+1

Bu benim için işe yaradı. – Zeropointer

+1

Günümü kurtar, teşekkürler –

0

Ben aynı sorunu var ve UIScrollView bir alt sınıfını oluşturarak bu çözüldü ve cancelContentTouchesTRUE değer ve çalışma cezası var ayarlayın.

- (BOOL)touchesShouldCancelInContentView:(UIView *)view { 
     return YES; 
} 

Umut sizin için çalışacaktır.