UITableView didSelectRowAtIndexPath: ilk dokunuşta çağrılmıyor


352

İle ilgili bir sorunum var UITableView's didSelectRowAtIndexPath.

Masam, satırı seçtiğimde yeni bir görünüm denetleyicisini başlatır ve iter.

Tablodaki herhangi bir satıra ilk kez dokunduğumda yöntem çağrılmaz. Başka bir satır seçtiğimde, normal şekilde çalışmaya başlar.

Bir kesme noktası ayarlayarak bunu doğruladım didSelectRowAtIndexPath. NSLogYönteme bir eklerken , sonunda yeni görünüm denetleyicisini iten ikinci satırı seçtiğimde, konsolda aynı anda iki günlük ifadesi görüyorum.

Herhangi bir öneri?


2
Kodunuzu gönderebilir misiniz tableView:didSelectRowAtIndexPath:?
gerry3

Aynı problemi yaşadım, cevabımı kontrol et: stackoverflow.com/a/44097559/1600061
Zsivics Sanel

1
Ana kuyrukta
sevk

Yanıtlar:


1356

Yanlışlıkla yazdığınız herhangi bir olasılık De selectRowAtIndexPath?


17
@Dschee, ilk muslukta çağrılmaz çünkü hiçbir şeyin seçimini kaldırmazsınız. Bir satır seçtiğinizde, ikinci bir satır seçmeye çalıştığınızda ilk satırın seçimi kaldırılır.
Ahbap

19
Bu yüzden çok seviyorum.
elbuild

4
Bu hatayı iptal ettim çünkü bu hatayı bir kez yaptığım için değil. Bu hatayı iptal ettim, çünkü bu hatayı uzun yıllar boyunca en az 4 kez yaptım, çok zaman harcadım.
Brooks Hanes

8
AMAN TANRIM!! Bu benim kod tanıttı en kötü hata olabilir.
Shantanu Paul

4
VAY. Beni çok kurtardı.
MortalMan

24

Ayrıca xib dosyasındaki tablo görünümünüzün seçim özelliğini de kontrol edin. Gerektiğinde 'Tek Seçim' veya 'Çoklu Seçim' kullanın.


2
Ba ha ha ha! Vay anlamaya çalışarak 4 saatimi harcadım. Beni kurtarmaya (selam)! Teşekkürler!

17

Aşağıdaki sorunu yaşadım:

  • satırdaki ilk dokunma -> efekt yok, seçim yok, asla
  • ikinci kez dokunma ve ardından -> her zaman doğru seçim davranışı

Benim durumumda, Show Selection on Toucharayüzüm Builder'da hatam kontrol ediliyordu. Burada IB'de işaretini kaldırabilirsiniz:

resim açıklamasını buraya girin

Birisine yardımcı olan umarım


Kahramanımsın! Bunun neden varsayılan olduğu hakkında bir fikriniz var mı? Bu davranışa sahip herhangi bir uygulamayı düşünemiyorum ve bunun çok garip bir varsayılan olduğunu düşünüyorum.
Christophe Fondacci

12

Sınıfınızda herhangi bir Hareket tanıyıcı ayarlayıp ayarlamadığınızı kontrol edin. Jestleri kaldırmak benim için çalıştı.


İkisine de sahibim; Jest tanıyıcı ve didSelectRowAtIndexPath? Ancak, her zaman hareket tanıma özelliği tercih edilir. İkincisine ulaşılamıyor. Her ikisini de ele almanın bir yolu var mı yoksa jest tanıyıcıdan kurtulmam gerekiyor mu? Teşekkürler!
Ron

Bu üstte olmalı :) iOS geliştirmede 7 yıl sonra 1 saat bana mal oldu.
Palyaço

6

Bu cevabı yayınlamayı bile tartıştım, çünkü bunun kendini göstermesi için yıldızların bir çeşit hizalanmış olduğunu düşünüyorum.

Bu sorunun bir varyasyonunu yaşıyorum ve diğer çözümleri kontrol ettim. Tablo görünümünde, ilk dokunuşta masamın son satırını işlemiyor. Onu vurgular, ancak didSelectRowAtIndexPathçağrılmaz. Diğer tüm satırlar iyi çalışır. Ancak, tableview sıçrama özelliğini açarsam sorunu çözer gibi görünür (ancak bir tableview sıçrama ile uğraşmanız gerekir).


Bunun olmasının nedenini buldun mu? Ben de aynı sorunu yaşıyorum. Tablo sıçramasını kapattığımda, tablodaki ilk / son satır ilk muslukta tepki vermiyor. Ben hata olduğunu düşündüm ama bir yıldan fazla ve hala oluyor.
filip.karas

Hayýr. Az önce masa görüntüsü sekmesini açtým ve býraktým.
Chase Roberts

Bu sorunu sadece bir iPhone 5'de (iOS 10.3) yaşıyorum - tablomda zıplamayı AÇIK hale getirmek sorunu düzeltti. Çok tuhaf!
Lee Probert

4

UITableViewCellSelectionStyleNone bu sorunu görüntüleyen hücre için ayarlandı (ios9).

Aramayı bitirdim

[tableView deselectRowAtIndexPath:indexPath animated:NO];

ilk şey

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

ki bu aynı değil, ama yeterince iyi. ios10'un ne tür bir masa kırılması getirdiğini merak ediyor.


Bu benim için çalıştı ama onun tarzı Yok yapmadan seçimi gizlemek için bir geçici çözüm gerekir. Geçersiz setSelected
kıldım

1

SWIFT 2

Bu değeri true olarak ayarladığınızdan emin olun:

self.tableView.allowsSelection = true

Bunu, kendinizden sonra viewDidLoad()vesuper.viewDidLoad()


1

SWIFT 3

Swift 3 ile olmayan bir sınıfta çalışıyorsanız UITableViewControllerve kullanıyorsanız UITableViewDelegate, yöntem başlığını kullanmanız gerekebilir:

@objc(tableView:didSelectRowAtIndexPath:) func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){...}

Projemi Swift 3'e geçirmiş olmama rağmen bu benim için çalıştı. Bu oldukça yeni, bu da daha sonra düzeltilebilir.


1

Sınıfınızda herhangi bir UITapGestureRecognizer ayarladıysanız, bu satırı didSelectRowAtIndexPath öğenize ekleyebilirsiniz:

[tableView deselectRowAtIndexPath:indexPath animated:NO];

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


1

Bu sorun, bir tableView içindeki hareket tanıyıcı ile çalışırken de bu görünümü kaldırmanız gerekmez, yalnızca jest özelliğinizin, cancelsTouchesInView = falsebu öğenin, bir jest tanınır.


0

SWIFT 3

Benim durumumda diğer cevapların hiçbiri işe yaramadı, benim için sabit olan şey:

tableView.delaysContentTouches = false


0

didSelectRowAtfonksiyonu benim app ilk veya ikinci musluk çağrılmadı ... Ben herhangi bir çözüm bulamadık sorunu çözmeye çalışıyordu. Ama aniden farkettim, view.animation renk değişimi ... Delegateanimasyon devam ederken yöntem çağrılmadı


0

Benim durumumda bir jest tanıyıcı ile bir UITableView bölüm üstbilgisi vardı. Üstbilgiye dokunulduğunda, bu bölüme birkaç satır eklemeli ve eklemeyi canlandırmalıdır (genişletme / daraltma bölümü gibi). Genişletilip dokunduğunda ilk kez didSelectRow delege yöntemi tetiklenmedi. Daha fazla dokunma ve genişletme / daraltma eylemleri için beklendiği gibi çalışıyordu.

@Ayoub Nouri tarafından cevap başına cancelsTouchesInView öğesini false olarak ayarladım ve bu sorunu çözdü. tapGestureRecognizer? .cancelsTouchesInView = yanlış


0

Hızlı 4.2

Özellik denetçisinde "Gecikmeli Dokunma" özelliğini devre dışı bırakmak sorunu çözdü.
Bundan sonra tıklamalar düzgün ve didSelectRowAt hemen tetiklenir.

XCode öznitelikleri denetçisi


0

Benim için işe yarayan, "didSelect ..." yazmaya başlamak ve ardından geri kalanını otomatik olarak düzeltmekti. Görünüşe göre benim sözdizimin bazı detayları sakattı. Diğerleri söylediler, IDE kullanın !!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.