Antworten:
Setzen Sie die selectionStyle
Eigenschaft der Tabellenzelle auf UITableViewCellSelectionStyleNone
. Das sollte verhindern, dass es hervorgehoben wird, und Sie können diese Eigenschaft auch in Ihrem überprüfen tableView:didSelectRowAtIndexPath:
.
Um die Auswahl der vollständig zu verhindern UITableViewCell
, haben Sie Ihr UITableViewDelegate
Gerät tableView:willSelectRowAtIndexPath:
. Von dieser Methode können Sie zurückkehren, nil
wenn Sie nicht möchten, dass die Zeile ausgewählt wird.
- (NSIndexPath *)tableView:(UITableView *)tv willSelectRowAtIndexPath:(NSIndexPath *)path
{
// Determine if row is selectable based on the NSIndexPath.
if (rowIsSelectable) {
return path;
}
return nil;
}
Dies verhindert, dass die Zeile ausgewählt und tableView:didSelectRowAtIndexPath:
aufgerufen wird. Beachten Sie jedoch, dass dies nicht verhindert , dass die Zeile hervorgehoben wird.
Wenn Sie verhindern möchten, dass die Zeile bei Berührung visuell hervorgehoben wird, können Sie sicherstellen, dass die Zelle auf eingestellt selectionStyle
ist UITableViewCellSelectionStyleNone
, oder Sie können Ihr UITableViewDelegate
Gerät vorzugsweise tableView:shouldHighlightRowAtIndexPath:
wie folgt einrichten :
- (BOOL)tableView:(UITableView *)tv shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
// Determine if row is selectable based on the NSIndexPath.
return rowIsSelectable;
}
didSelectRowAtIndexPath
da willSelectRowAtIndexPath
es sowieso immer aufgerufen wird.
benutze das:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
didSelectRowAtIndexPath
wird immer noch aufgerufen.
Nur für iOS 6+.
Sie können die Methode tableView:shouldHighlightRowAtIndexPath:
in Ihrem Delegaten implementieren
. Lesen Sie hier mehr: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html
Hatte auch dieses Problem alles schon Erwähnte ausprobiert. Der letzte Trick, der den "blauen Blitz" bei der Auswahl einer Tabellenzelle beseitigte, war das Hinzufügen dieser Zeile:
self.myTableView.allowsSelection = NO;
Ich bin mir nicht sicher, ob es diese eine Zeile oder alles zusammen war, aber als Gesamtergebnis bekomme ich keine blaue Auswahl oder sogar den blauen Blitz mehr. Glücklich!
einstellen cell.userInteractionEnabled = NO;
Apple sagt, dass Sie in didSelectRowAtIndexPath als erstes die Auswahl der Zeile aufheben sollten
[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:NO];
Anschließend können Sie den AccessoryType in ein Häkchen oder keines usw. ändern. Wenn Sie also didSelectRowAtIndexPath eingeben, können Sie die Auswahl der Zeile aufheben. Wenn diese nicht ausgewählt werden soll, aktivieren Sie diese Zeile einfach nicht.
Eine andere Möglichkeit besteht darin, ein paar Kategoriemethoden hinzuzufügen UITableViewCell
. Ich mag diese Antwort besser als Sebastians (auch gute) Antwort, weil ich meinen Tisch so baue. Ich dachte, es könnte jemand anderem hilfreich sein.
- (void)setSelectable:(BOOL)enabled {
[self setSelectionStyle:UITableViewCellSelectionStyleNone];
[self setUserInteractionEnabled:enabled];
}
- (BOOL)isSelectable {
BOOL disabled = [self selectionStyle]==UITableViewCellSelectionStyleNone &&
[self isUserInteractionEnabled];
return ! disabled;
}
Swift 4:
Sie können die Auswahl und Hervorhebung mithilfe von UITableViewDelegate verhindern: shouldHighlightRowAt Bei
dieser Antwort wird davon ausgegangen,
dass Sie eine benutzerdefinierte Zelle mit dem Namen CustomTableViewCell erstellt haben und dass Sie in dieser benutzerdefinierten Zelle mit dem Namen isSelectable einen Booleschen Wert erstellt haben
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
}
}
Dies ist die Swift-Version von Sebastian Celis 'objc Antwort.
Es gibt eine andere einfache Möglichkeit, um zu vermeiden, dass die Auswahl blau angezeigt wird.
Wählen Sie eine Zelle aus, die nicht blau angezeigt werden soll.
Wählen Sie dann den Attributinspektor aus (das Schildsymbol neben dem Linealsymbol in der Eigenschaftenansicht auf der Seite).
Ändern Sie dann das Feld "Auswahl" von "Blau" in "Keine".
Beachten Sie, dass dies vermutlich immer noch ausgewählt wird. Es wird nur nicht als ausgewählt angezeigt, wenn Sie nur den UI-Effekt vermeiden möchten.
Verwenden Sie tableView: willDisplayCell: forRowAtIndexPath: anstelle von tableView: didSelectRowAtIndexPath:, um den Blitz zu entfernen, der beim ersten Berühren der Zelle angezeigt wird.
- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
Um bestimmte Zeilen nicht auszuwählen, müssen Sie einige Änderungen an zwei Methoden des UITableView-Delegaten vornehmen.
In der folgenden Methode
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
Schreiben Sie nach der Zuweisung der Zelle den folgenden Code
if(indexPath.row == someCellNumber) cell.selectionStyle =UITableViewCellSelectionStyleNone;
Der obige Code verhindert das Hervorheben der Zelle, wenn der Benutzer versucht, eine Auswahl zu treffen.
in dieser Delegate-Methode unten
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if(indexPath.row == someCellNumber) return;
//for other cells write the code below...
}
Wenn Sie nicht schreiben, wird die if(indexPath.row == someCellNumber) return;
Zeile weiterhin ausgewählt und es besteht die Möglichkeit eines App-Absturzes
tableView:shouldHighlightRowAtIndexPath:
wie von Ayush unten angegeben