Yanıtlar:
Tablo hücresinin selectionStyle
özelliğini olarak ayarlayın UITableViewCellSelectionStyleNone
. Bu, vurgulamasını engellemelidir ve o mülkünüzde de kontrol edebilirsiniz tableView:didSelectRowAtIndexPath:
.
Seçimini tamamen önlemek için UITableViewCell
, senin sahip UITableViewDelegate
uygulamak tableView:willSelectRowAtIndexPath:
. Bu yöntemden nil
, satırın seçilmesini istemiyorsanız geri dönebilirsiniz .
- (NSIndexPath *)tableView:(UITableView *)tv willSelectRowAtIndexPath:(NSIndexPath *)path
{
// Determine if row is selectable based on the NSIndexPath.
if (rowIsSelectable) {
return path;
}
return nil;
}
Bu, satırın seçilmesini ve tableView:didSelectRowAtIndexPath:
çağrılmasını engeller . Ancak, bu olmadığını değil vurgulanan olmaktan satır engeller.
Görsel touch vurgulanan olmaktan satır önlemek istiyorsanız, hücre en sağlayabilirsiniz selectionStyle
ayarlandığında UITableViewCellSelectionStyleNone
veya tercihen sen senin olabilir UITableViewDelegate
uygulamak tableView:shouldHighlightRowAtIndexPath:
aşağıdaki gibi:
- (BOOL)tableView:(UITableView *)tv shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
// Determine if row is selectable based on the NSIndexPath.
return rowIsSelectable;
}
didSelectRowAtIndexPath
çünkü willSelectRowAtIndexPath
her zaman zaten aranacaktır.
bunu kullan:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
didSelectRowAtIndexPath
, hala çağrılır.
Yalnızca iOS 6+ için.
Yöntemi tableView:shouldHighlightRowAtIndexPath:
temsilcinize uygulayabilirsiniz
. Daha fazlasını buradan okuyun: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html
Bu sorunu da yaşadım, daha önce bahsedilen her şeyi denedim. Bir tablo hücresi seçerken "mavi flaştan" kurtulan son numara şu satırı eklemekti:
self.myTableView.allowsSelection = NO;
Bunun tek bir çizgi mi yoksa her şeyin birleşimi mi olduğundan emin değilim, ancak genel sonuç olarak artık mavi seçim ve hatta mavi flaş elde edemiyorum. Mutlu!
Ayarlamak cell.userInteractionEnabled = NO;
Apple, didSelectRowAtIndexPath'de yapmanız gereken ilk şeyin satırın seçimini kaldırmak olduğunu söylüyor
[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:NO];
Ardından, AccessoryType'ı bir onay işareti veya hiçbiri olarak değiştirebilirsiniz, vb. Yani didSelectRowAtIndexPath girdiğinizde satırın seçimini kaldırabilirsiniz ve seçilmesi gerekmiyorsa, o satırı kontrol etmeyin.
Başka bir yol da birkaç kategori yöntemi eklemektir UITableViewCell
. Bunu Sebastianların (aynı zamanda iyi) cevabından daha çok seviyorum çünkü masamı kurma şeklim. Başkasına yardımcı olabileceğini düşündüm.
- (void)setSelectable:(BOOL)enabled {
[self setSelectionStyle:UITableViewCellSelectionStyleNone];
[self setUserInteractionEnabled:enabled];
}
- (BOOL)isSelectable {
BOOL disabled = [self selectionStyle]==UITableViewCellSelectionStyleNone &&
[self isUserInteractionEnabled];
return ! disabled;
}
Swift 4:
: Sen UITableViewDelegate kullanarak seçimi ve vurgulama önleyebilir shouldHighlightRowAt
: Bu cevap, özel bir hücre adında oluşturulan sahip olduğu varsayılır CustomTableViewCell
Ve özel hücre adını verdikleri bir boolean içini yarattı: isSelectable
func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool {
let cell = tableView.cellForRow(at: indexPath) as! CustomTableViewCell
if cell.isSelectable == false {
return false
} else {
return true
}
}
Bu Sebastian Celis'in objc cevabının Swift versiyonu.
Seçimin mavi olarak görünmesini önlemenin başka bir basit yolu var.
Mavi olarak görünmesini istemediğiniz bir hücre seçin.
Ardından nitelik denetçisini seçin (yandaki özellikler görünümünde cetvel simgesinin yanındaki kalkan simgesi).
Ardından "Seçim" alanını "Mavi" yerine "Yok" olarak değiştirin.
Unutmayın, muhtemelen bu hala seçimdir, tüm istediğiniz UI efektini önlemekse, seçili olarak görünmeyecektir.
Hücreye ilk dokunduğunuzda görünen flaştan kurtulmak için tableView: didSelectRowAtIndexPath: yerine tableView: willDisplayCell: forRowAtIndexPath: kullanın.
- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
Belirli bir satırı seçilmemiş hale getirmek için, UITableView temsilcisinin iki yönteminde bazı değişiklikler yapmanız gerekir.
Aşağıdaki yöntemde
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
hücre tahsis edildikten sonra aşağıdaki kodu yazın
if(indexPath.row == someCellNumber) cell.selectionStyle =UITableViewCellSelectionStyleNone;
Yukarıdaki kod, kullanıcı bir şekilde seçmeye çalışırsa hücrenin vurgulanmasını önleyecektir.
aşağıdaki bu temsilci yönteminde
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if(indexPath.row == someCellNumber) return;
//for other cells write the code below...
}
Eğer if(indexPath.row == someCellNumber) return;
satır yazmazsanız yine de seçilecek ve uygulamanın çökme ihtimali var
tableView:shouldHighlightRowAtIndexPath:
olarak aşağıda Ayush tarafından da belirtildiği