ඔබ පේළියක් තට්ටු කරන විට UITableView
, පේළිය උද්දීපනය කර තෝරා ගනු ලැබේ. පේළියක් තට්ටු කිරීමෙන් කිසිවක් සිදු නොවන බැවින් මෙය අක්රිය කළ හැකිද?
ඔබ පේළියක් තට්ටු කරන විට UITableView
, පේළිය උද්දීපනය කර තෝරා ගනු ලැබේ. පේළියක් තට්ටු කිරීමෙන් කිසිවක් සිදු නොවන බැවින් මෙය අක්රිය කළ හැකිද?
Answers:
මට නම්, පහත සඳහන් දෑ හොඳින් ක්රියාත්මක විය:
tableView.allowsSelection = false
මෙයින් අදහස් කරන්නේ didSelectRowAt#
සරලව ක්රියා නොකරන බවයි. එනම්, මේසයේ පේළියක් ස්පර්ශ කිරීමෙන් කිසිසේත් කිසිවක් සිදු නොවනු ඇත. (එබැවින්, පැහැදිලිවම, කිසි විටෙකත් තෝරාගත් සජීවිකරණයක් සිදු නොවනු ඇත.)
(නම්, සෛල මත ඇති බව ඔබ සටහන UIButton
වෙනත් ඕනෑම පාලන හෝ, ඇත්තෙන්ම එම පාලනයන් තවමත් වැඩ කරන ක. ඔබ මේසය සෛල මත සිදු ඕනෑම පාලක, ඔබ "පේලියට තෝරා" කිරීමට ඉඩ UITableView හැකියාව මුළුමනින්ම සම්බන්ධයක් නැති භාවිතා didSelectRowAt#
කරයි.)
සැලකිල්ලට ගත යුතු තවත් කරුණක් නම්: මෙය UITableView
සංස්කරණ ප්රකාරයේදී ක්රියාත්මක නොවේ. සංස්කරණ ප්රකාරයේදී සෛල තේරීම සීමා කිරීමට පහත කේතය භාවිතා කරන්න:
tableView.allowsSelectionDuringEditing = false
selectionStyle
සෛලය තුළ දේපල සැකසිය යුතුය : cell.selectionStyle = UITableViewCellSelectionStyle.None
ස්විෆ්ට් හෝ cell.selectionStyle = UITableViewCellSelectionStyleNone
අරමුණු-සී.
tableView.allowSelection = false
tableViewDidSelectRowAtIndexPath
ඇමතිය යුතු නම් cell.selectionStyle = .None
එය අවශ්ය වේ. ඔබට එම නියෝජිත ශ්රිතය කැඳවීමට අවශ්ය නැතිනම් හෝ සැලකිලිමත් නොවන්නේ නම් (එනම්, වගු වීව්සෙල්හි පෙළ ක්ෂේත්රයක් තිබීම) සැකසුම tableView.allowsSelection = false
හොඳයි.
ඔබ කළ යුතුව ඇත්තේ තේරීම් විලාසය UITableViewCell
නිදසුනක් ලෙස සැකසීම පමණි :
පරමාර්ථය-සී:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
හෝ
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
ස්විෆ්ට් 2:
cell.selectionStyle = UITableViewCellSelectionStyle.None
ස්විෆ්ට් 3 සහ 4.x:
cell.selectionStyle = .none
තව දුරටත්, ඔබ එක්කෝ -tableView:didSelectRowAtIndexPath:
ඔබේ වගු දර්ශන නියෝජිතයා තුළ ක්රියාත්මක නොකරන බවට වග බලා ගන්න හෝ ඔබ එය ක්රියාත්මක කරන්නේ නම් ඔබට කිසිදු ක්රියාමාර්ගයක් ගැනීමට අවශ්ය නොවන සෛල පැහැදිලිවම බැහැර කරන්න.
මම මෑතකදී මෙම ලිපිය කියවා එය මට උදව් කර ඇති නිසා, සියලු පිළිතුරු ඒකාබද්ධ කිරීම සඳහා තවත් පිළිතුරක් පළ කිරීමට මට අවශ්ය විය (පසු පරම්පරාව සඳහා).
එබැවින්, ඔබ අපේක්ෂිත තර්කනය සහ / හෝ ප්රති result ලය අනුව වෙනස් පිළිතුරු 5 ක් ඇත:
1. සෛලයේ වෙනත් අන්තර්ක්රියා වෙනස් නොකර නිල් ඉස්මතු කිරීම අක්රිය කිරීමට:
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
මම UITutViewCell හි සත්කාරකත්වය දරන UIButton එකක් හෝ වෙනත් පාලනයක් (ය) ඇති විට මම මෙය භාවිතා කරන අතර පරිශීලකයාට පාලකයන් සමඟ අන්තර් ක්රියා කිරීමට හැකි නමුත් සෛලයම නොවේ.
සටහන : ඉහත සඳහන් කළ ටෝනි මිලියන් මෙය වළක්වන්නේ නැතtableView:didSelectRowAtIndexPath:
. මම සරල "නම්" ප්රකාශ මගින් මෙය වටහා ගනිමි, බොහෝ විට කොටස පරීක්ෂා කිරීම සහ යම් අංශයක් සඳහා ක්රියා කිරීමෙන් වැළකී සිටීම.
මේ වගේ සෛලයක් තට්ටු කිරීම සඳහා පරීක්ෂා කිරීමට මා සිතූ තවත් ක්රමයක් නම්:
- (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. සම්පූර්ණ වගුවක් සඳහා මෙය කිරීමට, ඔබට වගුවේ ඇති සෑම සෛලයකටම ඉහත විසඳුම යෙදිය හැකිය, නමුත් ඔබට මෙයද කළ හැකිය:
[tableView setAllowsSelection:NO];
මගේ පරීක්ෂණයේදී, මෙය තවමත් ඇතුළත පාලනයන් UITableViewCell
අන්තර්ක්රියාකාරී වීමට ඉඩ දෙයි .
3. කොටුවක් "කියවීමට පමණි" සෑදීමට ඔබට මෙය කළ හැකිය:
[cell setUserInteractionEnabled:NO];
4. සම්පූර්ණ වගුවක් "කියවීමට-පමණක්" සෑදීමට
[tableView setUserInteractionEnabled:NO];
5. සෛලයක් ඉස්මතු කළ යුතුද යන්න පියාසර කරන විට තීරණය කිරීම සඳහා ( මෙම පිළිතුරට ව්යංගයෙන් තේරීම ඇතුළත් වේ), ඔබට පහත සඳහන් UITableViewDelegate
ප්රොටෝකෝලය ක්රමය ක්රියාත්මක කළ හැකිය :
- (BOOL)tableView:(UITableView *)tableView
shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
tableView:shouldHighlightRowAtIndexPath:
, එය සාමාන්යයෙන් (සැමවිටම නොවේ) මගේ ප්රියතම ප්රවේශයයි.
මෙය ක්රියාවට නැංවීමේ මගේ අත්දැකීම් මත පදනම් වූ නිවැරදි පිළිතුරු යැයි මා විශ්වාස කරන දේ සාරාංශ කිරීම:
සමහර සෛල සඳහා තේරීම අක්රිය කිරීමට ඔබට අවශ්ය නම්, භාවිතා කරන්න:
cell.userInteractionEnabled = NO;
තේරීම වලක්වා ගැනීම මෙන්ම මෙය වගුව ද නවත්වයි: didSelectRowAtIndexPath: එය සකසා ඇති සෛල සඳහා කැඳවනු ලැබේ. (මෙම පිළිතුර සඳහා ණය ටෝනි මිලියනය වෙත යයි, ස්තූතියි!)
ක්ලික් කිරීමට අවශ්ය ඔබේ බොත්තම් බොත්තම් තිබේ නම්, ඒ වෙනුවට ඔබට අවශ්ය වන්නේ:
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
තවද ඔබ කොටුවේ ඇති ඕනෑම ක්ලික් කිරීමක් නොසලකා හැරිය යුතුය - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
.
සම්පූර්ණ වගුව සඳහා තේරීම අක්රිය කිරීමට ඔබට අවශ්ය නම්, භාවිතා කරන්න:
tableView.allowsSelection = NO;
(පාවුලෝ ඩි බැරෝස්ට ණය, ස්තූතියි!)
IOS 6.0 අනුව, UITableViewDelegate
ඇත tableView:shouldHighlightRowAtIndexPath:
. (IOS ප්රලේඛනයේ ඒ ගැන කියවන්න .)
සෛල තෝරා ගැනීමේ ශෛලිය වෙනස් කිරීමකින් තොරව, සෛල සිදුවීම් හැසිරවීම සමඟ අවුල් කිරීම userInteractionEnabled = NO
හෝ මෙහි ලේඛනගත කර ඇති වෙනත් ශිල්පීය ක්රම නොමැතිව නිශ්චිත පේළි උද්දීපනය කළ නොහැකි (සහ ව්යංගයෙන්, තෝරාගත නොහැකි) ලෙස සලකුණු කිරීමට මෙම ක්රමය ඔබට ඉඩ සලසයි .
ඔබ තෝරා ගැනීමෙන් ම තනන්නා අතුරු මුහුණත සිට පේළියේ ආබාධිත තෝරා ද හැකි NoSelection
සිට selection
පහත රූපයේ පෙන්වා ඇති පරිදි පොලිස් පරීක්ෂක කවුළුවෙහි (UITableView දේපල) විකල්පය
ස්විෆ්ට් 3 සඳහා ස්ථාවර විසඳුම
cell.selectionStyle = .none
ඔබට තේරීම ෆ්ලෑෂ් කිරීමට පමණක් අවශ්ය නම්, තෝරාගත් තත්වයේ රැඳී නොසිටින්න, ඔබට ඇමතිය හැකිය
didSelectRowAtIndexPath
පසුව එන
[tableView deselectRowAtIndexPath:indexPath animated:YES];
එබැවින් එය තෝරාගත් තත්වය ෆ්ලෑෂ් කර ආපසු හරවනු ඇත.
cellForRowAtIndexPath
මෙම කේතය ලිවීමේදී මා භාවිතා කරන්නේ මෙයයි.
cell.selectionStyle = UITableViewCellSelectionStyleNone;
සිට UITableViewDelegate
ප්රොටොකෝලය ඔබ ක්රමය භාවිතා කල හැක willSelectRowAtIndexPath
හා return nil
ඔබ පේළිය තෝරා අවශ්ය නැති නම්.
ඒ ආකාරයෙන්ම ඔබට willDeselectRowAtIndexPath
ක්රමවේදය භාවිතා කළ හැකි return nil
අතර පේළිය තෝරා නොගැනීමට ඔබට අවශ්ය නැතිනම්.
1- ඔබ කළ යුතුව ඇත්තේ තෝරා ගැනීමේ ශෛලියUITableViewCell
නිදසුනක් ලෙස සැකසීම පමණි :
පරමාර්ථය-සී:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
හෝ
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
ස්විෆ්ට් 2:
cell.selectionStyle = UITableViewCellSelectionStyle.None
ස්විෆ්ට් 3:
cell.selectionStyle = .none
2 - ක්රියාත්මක නොකරන්න - tableView:didSelectRowAtIndexPath:
ඔබේ වගු දැක්ම තුළ delegate
හෝ ඔබ එය ක්රියාත්මක කරන්නේ නම් ඔබට කිසිදු ක්රියාමාර්ගයක් ගැනීමට අවශ්ය නොවන සෛල පැහැදිලිව බැහැර කරන්න.
3 - තවද, ඔබට එය කතන්දර පුවරුවෙන්ද කළ හැකිය. වගු දර්ශන කොටුව ක්ලික් කරන්න සහ වගු දර්ශන කොටුව යටතේ ඇති ගුණාංග පරීක්ෂක තුළ, තේරීමට යාබදව පහළට පහළට පහළට කිසිවක් වෙනස් නොකරන්න.
4 - (iOS) 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
}
ස්නිපටයට පහළින් උද්දීපනය කිරීම අක්රීය නමුත් එය ඇමතුම අක්රීය කරයි didSelectRowAtIndexPath
. එබැවින් ඔබ ක්රියාත්මක නොකරන්නේ didSelectRowAtIndexPath
නම් පහත ක්රමය භාවිතා කරන්න. ඔබ වගුව නිර්මාණය කරන විට මෙය එකතු කළ යුතුය. මෙය බොත්තම් මත සහ UITextField
කොටුව තුළ ක්රියා කරයි.
self.tableView.allowsSelection = NO;
ස්නිපටයට පහළින් උද්දීපනය කිරීම අක්රීය කරන අතර එය ඇමතුම අක්රීය නොකරයි didSelectRowAtIndexPath
. කොටුවේ තේරීමේ විලාසය කිසිවක් ඇතුලත සකසන්නcellForRowAtIndexPath
cell.selectionStyle = UITableViewCellSelectionStyleNone;
ස්නිපටයට පහළින් කොටුවේ ඇති සියල්ල අක්රීය කරන්න. මේ අතර අන්තර් අක්රීය කරනු ඇත buttons
, textfields
:
self.tableView.userInteractionEnabled = false;
Swift
ඉහත Objective-C
විසඳුම් වලට සමාන පහත දැක්වේ :
පළමු විසඳුම ප්රතිස්ථාපනය කිරීම
self.tableView.allowsSelection = false
දෙවන විසඳුම ප්රතිස්ථාපනය කිරීම
cell?.selectionStyle = UITableViewCellSelectionStyle.None
තෙවන විසඳුම ප්රතිස්ථාපනය කිරීම
self.tableView.userInteractionEnabled = false
ටයිප් කිරීමට උත්සාහ කරන්න:
cell.selected = NO;
අවශ්ය විටදී එය ඔබේ පේළිය තෝරා නොගනී.
ස්විෆ්ට් 3 හි ...
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let r = indexPath.row
print("clicked .. \(r)")
tableView.cellForRow(at: indexPath)?.setSelected(false, animated: true)
}
දේපල UITableViewCell
භාවිතය තහනම් කර ඇති බවට පාලනයක් තිබීම නිසා මම මේ සමඟ ද දැඩි ලෙස පොරබදමින් සිටිමි userInteractionEnabled
. මට සැකසුම් සඳහා සෛල 3 ස්ථිතික වගුවක් ඇත, 2 දිනයන් සමඟ, 1 සක්රිය / අක්රිය ස්විචයක් ඇත. ස්ටෝරිබෝඩ් / අයිබී හි සෙල්ලම් කිරීමෙන් පසු පහළ කොටස තෝරාගත නොහැකි තත්වයට පත් කිරීමට මට හැකි වී ඇත, නමුත් ඔබ එය තට්ටු කරන විට ඉහළ පේළි වලින් එකක් තේරීම අතුරුදහන් වේ. මෙන්න මගේ සැකසුම් වල WIP රූපයක් UITableView:
ඔබ 3 වන පේළිය තට්ටු කළහොත් කිසිවක් සිදු නොවේ, තේරීම දෙවන පේළියේ රැඳෙනු ඇත. ක්රියාකාරීත්වය ප්රායෝගිකව ඇපල් හි දින දර්ශන යෙදුමේ සිදුවීම් සිදුවීම් තේරීමේ තිරයේ පිටපතකි.
කේතය පුදුම සහගත ලෙස අනුකූල වේ, සියල්ලම IOS2 = /:
- (NSIndexPath *)tableView: (UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 2) {
return nil;
}
return indexPath;
}
මෙය තේරීමේ විලාසය කිසිවෙකුට සැකසීමට සමගාමීව ක්රියා කරයි, එබැවින් ස්පර්ශක සිදුවීම් මත කොටුව නොපෙනේ
ඔබට මෙම කේතය cellForRowAtIndexPath තුළට දැමිය යුතුය
සෛල තේරීමේ දේපල අක්රීය කිරීමට: (කොටුව තට්ටු කරන අතරතුර).
cell.selectionStyle = UITableViewCellSelectionStyle.None
මම මෙය භාවිතා කරමි, එය මට වැඩ කරයි.
cell?.selectionStyle = UITableViewCellSelectionStyle.None
පේළියක් තෝරාගැනීමේදී උද්දීපනය වීම වැළැක්වීම සඳහා මෙය හොඳම සහ පහසුම විසඳුම වන අතර
cell.selectionStyle = UITableViewCellSelectionStyleNone;
පේළිය තෝරාගෙන ඇති බව කෙටියෙන් පෙන්වීම සහ එය ක්රියා විරහිත කිරීම ඉඳහිට ප්රයෝජනවත් යැයි මම යෝජනා කිරීමට කැමැත්තෙමි. මෙය පරිශීලකයින්ට තෝරා ගැනීමට අදහස් කළ දේ සනාථ කරමින් අනතුරු අඟවයි:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:NO];
...
}
ඔබට UITableViewCellSelectionStyleNone
භාවිතා කිරීමට අවශ්ය නැතිනම් / භාවිතා කළ නොහැකි අවස්ථාවල දී සමාන ප්රති achieve ල ලබා ගැනීම සඳහා ඔබට පසුබිම් වර්ණය හිස් ලෙස සැකසිය හැකිය UITableViewCellSelectionStyleNone
.
ඔබ පහත සඳහන් පරිදි කේත භාවිතා කරනු ඇත:
UIView *backgroundColorView = [[UIView alloc] init];
backgroundColorView.backgroundColor = [UIColor clearColor];
backgroundColorView.layer.masksToBounds = YES;
[cell setSelectedBackgroundView: backgroundColorView];
ඔබ එක් එක් සෛලයට අමතර වර්ණ දර්ශනයක් එක් කිරීම නිසා මෙය ඔබගේ ක්රියාකාරිත්වය පිරිහීමට ලක් කරයි.
ඔයාට පාවිච්චි කරන්න පුළුවන් :
cell.selectionStyle = UITableViewCellSelectionStyleNone;
ඔබේ UITableView හි දර්ශක මාර්ග ක්රමයේ පේළිය සඳහා කොටුව තුළ.
ඔබට භාවිතා කළ හැකිය:
[tableView deselectRowAtIndexPath:indexPath animated:NO];
වගු දැක්මෙහි didselectrowatindexpath ක්රමය.
cell.selectionStyle = UITableViewCellSelectionStyle.none
ස්විෆ්ට් 3 හි ඇත.
UITableViewDataSource ප්රොටොකෝලය වෙතින් , ඇතුළත ක්රමය cellForRowAt
එකතු කරන්න:
let cell = tableView.dequeueReusableCell(withIdentifier: "YOUR_CELL_IDENTIFIER", for: indexPath)
cell.selectionStyle = .none
return cell
හෝ
ඔබට කතන්දර පුවරුව> කොටුව> හැඳුනුම් පරීක්ෂක> තේරීම තෝරාගෙන පතන සිට කිසිවක් තෝරන්න.
cell.selectionStyle = UITableViewCellSelectionStyleNone;
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
[cell setSelected:NO animated:NO];
[cell setHighlighted:NO animated:NO];
සුබ කේතීකරණයක් !!!
selection
වන අතර ඇත්ත වශයෙන්මhighlighting
එය අක්රීය වේ. ඉහළ ඡන්දය දුන් බොහෝ පිළිතුරුdisable selection
අක්රීය කිරීම ආමන්ත්රණය කරන්නේ කෙසේද සහ නොදන්නේ කෙසේද යන්න පැහැදිලි කරයිhighlighting
. ඉස්මතු කිරීමේ භාවිතය පමණක් අක්රිය කිරීමටcell.selectionStyle = .None
හෝ යන්නstoryboard / cell / Selection = None