Kaip išjungti UITableView pasirinkimą?

Kai spustelėsite eilutę UITableView , eilutė bus paryškinta ir pasirinkta. Ar tai įmanoma išjungti, todėl linijos paspaudimas nieko nedaro?

1118
10 окт. nustatė DavidM 10 d. 2008-10-10 14:32 '08 ne 14:32 2008-10-10 14:32
@ 36 atsakymai
  • 1
  • 2

Man buvo atlikta ši informacija:

tableView.allowsSelection = NO;

Tai reiškia, kad didSelectRowAt# tiesiog neveiks. Tai reiškia, kad paliesdami lentelės eilutę kaip toks, nieko nedarysite. (Ir todėl akivaizdu, kad pasirinkta animacija niekada nebus.)

(Pastaba: jei turite UIButton ant ląstelių ar bet kokių kitų valdiklių, žinoma, šios kontrolės priemonės vis dar veiks. Bet kokie valdikliai, esantys ant stalo >didSelectRowAt# .)

530
22 июля '09 в 19:56 2009-07-22 19:56 atsakymą pateikė Paulo De Barrosas liepos 22 d., 09:56, 2009-07-22 19:56

Viskas, ką jums reikia padaryti, yra nustatyti UITableViewCell instancijos pasirinkimo stilių:

C tikslas:

 cell.selectionStyle = UITableViewCellSelectionStyleNone; 

arba

 [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 

„Swift 2“:

border=0
 cell.selectionStyle = UITableViewCellSelectionStyle.None 

Swift 3 ir 4.x:

 cell.selectionStyle = .none 

Be to, įsitikinkite, kad nepavyko -tableView:didSelectRowAtIndexPath: į savo lentelės rodinio delegatą arba aiškiai neįtraukę >-tableView:didSelectRowAtIndexPath: jei juos įgyvendinsite.

Daugiau informacijos čia ir čia.

1887 m
10 окт. Martin Gordon atsakymas spalio 10 d 2008-10-10 16:22 '08 at 4:22 2008-10-10 16:22

Kadangi neseniai perskaičiau šį pranešimą ir padėjau, norėjau paskelbti dar vieną atsakymą, kad galėčiau sujungti visus atsakymus (apie palikuonis).



Taigi, iš tikrųjų yra 5 skirtingi atsakymai, priklausomai nuo jūsų norimos logikos ir (arba) rezultato:

1.Norėdami išjungti mėlyną šviesą nekeičiant kitų ląstelių sąveikos:

 [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 

Aš naudoju tai, kai turiu UIButton ar kitą kontrolę (-es), esančią „UITableViewCell“, ir noriu, kad vartotojas sąveikautų su valdikliais, bet ne su pačiu >

PASTABA . Kaip pažymėjo Tony Million, tai netrukdo tableView:didSelectRowAtIndexPath: Aš eisiu aplink tai paprastais „jei“ pareiškimais, dažniausiai tikrinant skyrių ir vengiant konkrečiam skyriui taikomų veiksmų

Kitas būdas, kaip nusprendžiau patikrinti, ar klausytis ląstelės, yra toks:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // A case was selected, so push into the CaseDetailViewController UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; if (cell.selectionStyle != UITableViewCellSelectionStyleNone) { // Handle tap code here } } 



2. Norėdami tai padaryti visai lentelei, pirmiau pateiktą sprendimą galite pritaikyti kiekvienai lentelės ląstelei, bet taip pat galite tai padaryti:

 [tableView setAllowsSelection:NO]; 

Mano bandyme, tai vis dar leidžia interaktyvius valdiklius UITableViewCell viduje.


3. Jei norite sukurti tik skaitymui skirtą >

 [cell setUserInteractionEnabled:NO]; 



4. Visą lentelę padaryti tik skaitymui

 [tableView setUserInteractionEnabled:NO]; 



5. Norėdami nustatyti, ar ląstelių pasirinkimas (kuris pagal šį atsakymą reiškia pasirinkimą), galite įgyvendinti toliau nurodytą UITableViewDelegate protokolo metodą:

 - (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath 
340
10 июня '11 в 14:08 2011-06-10 14:08 atsakymą pateikė mbm29414 birželio 10 d. 11:08 2011-06-10 14:08

Apibendrinant tai, kas manau, yra teisinga, remdamasi savo patirtimi ją įgyvendinant:

Jei norite išjungti pasirinkimą tik kai kurioms ląstelėms, naudokite:

 cell.userInteractionEnabled = NO; 

Be to, užkertant kelią atrankai, jis taip pat sustabdo „ViewView“: didSelectRowAtIndexPath: paragino įdiegtas ląsteles. (Už šį atsakymą „Tony Million“ siunčiamas kreditas, ačiū!)

Jei turite >

 [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 

ir jūs taip pat turite ignoruoti bet kokius paspaudimus ant >- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath .

Jei norite išjungti visos lentelės pasirinkimą, naudokite:

 tableView.allowsSelection = NO; 

(Atsakymas Paulo de Barrosui, ačiū!)

78
01 июня '11 в 16:32 2011-06-01 16:32 atsakymą pateikė JosephH birželio 1 d. 11 d. 16:32 2011-06-01 16:32

Pradedant nuo iOS 6.0, UITableViewDelegate turi tableView:shouldHighlightRowAtIndexPath: (Skaitykite apie tai „iOS“ dokumentacijoje .)

Šis metodas leidžia pažymėti tam tikras eilutes kaip neinformuotas (ir netiesiogiai, netinkamas), nekeičiant ląstelių atrankos stiliaus, kad userInteractionEnabled = NO su ląstelių įvykių tvarkymu naudojant „ userInteractionEnabled = NO arba bet kurį kitą čia aprašytą metodą.

52
01 нояб. atsakymas suteiktas 01 nov. 2012-11-01 00:48 '12 0:48 2012-11-01 00:48

Taip pat galite išjungti eilutės pasirinkimą iš sąsajos kūrėjo, pasirinkdami NoSelectionselection parametrų (iš UITableView ypatybių) inspektoriaus skydelyje, kaip parodyta toliau pateiktame paveikslėlyje.

2019

45
25 апр. atsakymą pateikė vignesh kumar 25 Bal 2013-04-25 16:13 '13, 16:13, 2013-04-25 16:13

PAGRINDINIS SWIFTO SPRENDIMAS 3

 cell.selectionStyle = .none 
43
07 янв. Atsakymą pateikė MANISH PATHAK 07 sausis 2017-01-07 22:15 '17, 10:15 pm 2017-01-07 22:15

Jei kas nors turi atsakyti į „ Swift“ :

 cell.selectionStyle = .None 
33
02 дек. Atsakymas duotas Aks 02 Dec. 2014-12-02 12:39 '14, 12:39 2014-12-02 12:39

Jei norite, kad tik blykstės pasirinkimas nepasiliktų pasirinktoje būsenoje, galite skambinti

 didSelectRowAtIndexPath 

toliau pateiktą informaciją

 [tableView deselectRowAtIndexPath:indexPath animated:YES]; 

kad ji išryškintų pasirinktą būseną ir grąžą.

32
13 нояб. Chris Fox atsakymas lapkričio 13 d 2012-11-13 18:07 '12, 18:07, 2012-11-13 18:07

UITableViewCell XIB, atributo inspektoriaus nustatyme nustatykite Selection reikšmę None .

2019

05 окт. atsakymas pateikiamas Zaid Pathan 05 okt. 2016-10-05 10:49 '16 at 10:49 2016-10-05 10:49

Tai, ką aš naudoju, į cellForRowAtIndexPath parašykite šį kodą.

 cell.selectionStyle = UITableViewCellSelectionStyleNone; 
28
30 марта '15 в 13:31 2015-03-30 13:31 Ahsano Ebrahimo atsakymas kovo 30 d. 15 d. 1:31 val. 2015-03-30 13:31

Jei nenorite, kad eilutė būtų pasirinkta, iš „ UITableViewDelegate protokolo galite naudoti „ willSelectRowAtIndexPath ir return nil metodus.

Taip pat galite naudoti „ willDeselectRowAtIndexPath ir return nil metodus, jei nenorite, kad eilutė būtų atšaukta.

27
30 июня '09 в 13:01 2009-06-30 13:01 atsakymą pateikė vartotojo41806 birželio 30 d. 13:01 2009-06-30 13:01

C tikslas:

  1. Žemiau fragmentas išjungia paryškinimą, bet taip pat išjungia didSelectRowAtIndexPath skambutį. Taigi, jei jūs neįgyvendinote didSelectRowAtIndexPath naudokite toliau pateiktą metodą. Tai turėtų būti pridėta kuriant lentelę. Tai veiks su mygtukais ir UITextField .

     self.tableView.allowsSelection = NO; 
  2. Žemiau fragmentas išjungia paryškinimą ir didSelectRowAtIndexPath skambučio. Nustatykite ląstelių pasirinkimo stilių į Niekas, cellForRowAtIndexPath

     cell.selectionStyle = UITableViewCellSelectionStyleNone; 
  3. Žemiau fragmentas išjungia viską >buttons , textfields :

     self.tableView.userInteractionEnabled = false; 

Swift:

Žemiau yra „ Swift ekvivalentas pirmiau minėtiems „ Objective-C :

  1. Pirmojo sprendimo pakeitimas

     self.tableView.allowsSelection = false 
  2. Antrasis sprendimas pakeičiamas

     cell?.selectionStyle = UITableViewCellSelectionStyle.None 
  3. Trečiojo sprendimo pakeitimas

     self.tableView.userInteractionEnabled = false 
20
22 нояб. Atsakymą pateikė Arun Gupta lapkričio 22 d. 2014-11-22 12:43 '14, 12:43, 2014-11-22 12:43

Pabandykite įvesti:

 cell.selected = NO; 

Jei reikia, panaikinkite liniją.

„Swift3“ ...

 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let r = indexPath.row print("clicked .. \(r)") tableView.cellForRow(at: indexPath)?.setSelected(false, animated: true) } 
18
27 мая '11 в 18:37 2011-05-27 18:37 atsakymas duotas wzbozon gegužės 27 d. 11 val. 18:37 2011-05-27 18:37

Aš taip pat labai UITableViewCell dėl to, kontroliuodamas „ UITableViewCell , kuris draudžia naudoti „ userInteractionEnabled nuosavybę. Turiu statinį stalą su 3 ląstelėmis nustatymams, 2 su datomis, 1 su įjungimo / išjungimo jungikliu. Po to, kai žaisti „Storyboard / IB“, pavyko padaryti apatinę dalį nepasirinktiną, bet paspaudus, iš vienos iš viršutinių eilučių pasirinkimas išnyksta. Čia yra mano UITableView nustatymų WIP vaizdas:

2019

13
04 янв. atsakymas pateikiamas Yarek T 04 jan. 2013-01-04 00:08 '13 - 0:08 2013-01-04 00:08

1- Viskas, ką jums reikia padaryti, yra nustatyti UITableViewCell pavyzdžio pasirinkimo stilių :


C tikslas:

 cell.selectionStyle = UITableViewCellSelectionStyleNone; 

arba

 [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 


„Swift 2“:

 cell.selectionStyle = UITableViewCellSelectionStyle.None 


„Swift 3“:

 cell.selectionStyle = .none 


2 - Neįvykdykite - tableView: didSelectRowAtIndexPath: savo lentelės rodinyje deleguokite arba aiškiai išskirkite ląsteles, kurioms norite, kad neturėtumėte jokių veiksmų, jei jį įgyvendinate.

3 - Toliau galite tai padaryti ir iš siužetinės linijos. Spustelėkite lentelės rodinyje esančią >


4 - Galite išjungti lentelės >Xcode 9, Swift 4.0

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "OpenTbCell") as! OpenTbCell cell.selectionStyle = .none return cell } 
12
30 марта '15 в 9:10 2015-03-30 09:10 atsakymas pateikiamas kovo 30 d. 15 val. 9:10 2015-03-30 09:10

Galime rašyti tipo kodą

  cell.selectionStyle = UITableViewCellSelectionStyleNone; 

bet kai naudotojo ląstelė xib virš linijos, tuo metu įspėja

vartotojo ląstelių xib

iš sąsajos konstruktoriaus privalome nustatyti Nėra pasirinkimo stilių

10
24 марта '12 в 16:21 2012-03-24 16:21 atsakymas pateikiamas „ iDhaval“ kovo 24 d., 12 val. 15:21 PM 2012-03-24 16:21

Jums reikia tik įdėti šį kodą į cellForRowAtIndexPath

Norėdami išjungti ląstelių pasirinkimo savybę: (kai spustelėsite >

 cell.selectionStyle = UITableViewCellSelectionStyle.None 
10
18 мая '16 в 8:17 2016-05-18 08:17 Atsakymą pateikė Gaurav Patel , gegužės 18 d., 16 d., 8:17 2016-05-18 08:17

pabandykite

 cell.selectionStyle = UITableViewCellSelectionStyleNone; 

ir

 [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 

ir jūs taip pat galite nustatyti pasirinkimo stilių naudodami sąsajos sąsają.

9
09 июля '12 в 10:27 2012-07-09 10:27 atsakymas pateikiamas v_1 liepos 09 '12 10:27 2012-07-09 10:27

Aš naudoju tai, kas veikia man.

 cell?.selectionStyle = UITableViewCellSelectionStyle.None 
9
19 окт. atsakymas duotas priyanka gautam spalis 19. 2015-10-19 15:33 '15 15:33 2015-10-19 15:33

Nors tai yra geriausias ir paprasčiausias sprendimas neleisti, kad pasirinkimo metu būtų rodoma eilutė

 cell.selectionStyle = UITableViewCellSelectionStyleNone; 

Taip pat siūlau, kad kartais būtų naudinga trumpai parodyti, kad eilutė yra pasirinkta ir tada išjungta. Tai įspėja vartotojus patvirtinti, kad jie ketina pasirinkti:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:NO]; ... } 
7
21 авг. Atsakė Steve Barden rugpjūčio 21 d 2013-08-21 00:25 '13 - 0:25 2013-08-21 00:25

Taip pat galite nustatyti „Clear“ fono spalvą, kad pasiektumėte tą patį efektą kaip „ UITableViewCellSelectionStyleNone jei nenorite / negalite naudoti „ UITableViewCellSelectionStyleNone .

Naudotumėte šį kodą:

 UIView *backgroundColorView = [[UIView alloc] init]; backgroundColorView.backgroundColor = [UIColor clearColor]; backgroundColorView.layer.masksToBounds = YES; [cell setSelectedBackgroundView: backgroundColorView]; 

Tai gali pabloginti jūsų našumą, kai prie kiekvieno >

6
14 янв. atsakymas suteiktas virindh Jan 14 2014-01-14 04:43 '14 at 4:43 2014-01-14 04:43

Tiesiogiai išjunkite „TableViewCell“ iškraipymą siužetinėje sistemoje

2019

14 апр. Kamani Jasmin atsakymas balandžio 14 d 2018-04-14 00:33 '18 prie 0:33 201-04-14 00:33

Galite naudoti UITableViewCell pasirinkimąStyle savybę

  cell.selectionStyle = UITableViewCellSelectionStyleNone; 

Or

  [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 

Be to, nesilaikykite toliau nurodyto delegato.

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { ... } 

Jei sukūrėte „Xib“ / „Storyboard“ failą, galite keisti „tableview“ nustatymą „setUserInteractionEnabled“ į „No“, pašalindami >

5
15 мая '15 в 11:55 2015-05-15 11:55 Atsakymą pateikė Jayprakash Dubey gegužės 15 d. 15 val. 11:55 2015-05-15 11:55

Taip pat galite tai padaryti iš siužetinės linijos. Spustelėkite lentelės peržiūros >

5
04 дек. Atsakymas pateikiamas Cindy 04 Dec. 2014-12-04 08:12 '14, 8:12 val. 2014-12-04 08:12
 UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; [cell setSelected:NO animated:NO]; [cell setHighlighted:NO animated:NO]; 

Laimingas kodavimas !!!

5
31 июля '14 в 15:53 2014-07-31 15:53 atsakymą pateikė Rinku Sadhwani , liepos 31 d. 14, 15:53 2014-07-31 15:53
 cell.selectionStyle = UITableViewCellSelectionStyleNone; 
5
10 апр. Atsakymą pateikė „ iDeveloper“ 10 balandis. 2014-04-10 15:08 '14, 15:08 2014-04-10 15:08

Galite tai naudoti

 cell.selectionStyle = UITableViewCellSelectionStyleNone; 
5
10 мая '13 в 12:44 2013-05-10 12:44 atsakymą iEinšteinas pateikia gegužės 10 d. 13 val. 12:44 2013-05-10 12:44

Norėdami išjungti „UItableviewcell“ parinktį

 cell.selectionStyle = UITableViewCellSelectionStyleNone; 

Ir neturėtų leisti vartotojui bendrauti su >

 cell.userInteractionEnabled = NO; 
5
18 янв. atsakymą pateikė Sharme 18 sausis 2013-01-18 03:51 '13, 3:51, 2013-01-18 03:51

Galite naudoti.

 [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 
5
08 окт. atsakymą pateikė Mak083 08 okt. 2013-10-08 14:10 '13, 14:10 pm 2013-10-08 14:10
  • 1
  • 2