Ich zeige in einer Gruppe tableview
Inhalte an, die aus XML analysiert wurden. Ich möchte das Klickereignis darauf deaktivieren (ich sollte überhaupt nicht darauf klicken können). Die Tabelle enthält zwei Gruppen. Ich möchte die Auswahl nur für die erste Gruppe deaktivieren, nicht jedoch für die zweite Gruppe. Klicken Sie auf die erste Reihe der zweiten Gruppe navigates
in meiner Röhre player view
.
Wie kann ich nur bestimmte Gruppen oder Zeilen auswählbar machen?
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.section!=0)
if(indexPath.row==0)
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:tubeUrl]];
}
Vielen Dank.
quelle
tableView:shouldHighlightRowAtIndexPath:
es eine neueUITableViewDelegate
Methode, dieBOOL
basierend darauf zurückgibt, ob das übergebeneindexPath
Element hervorgehoben werden soll oder nicht . Wenn Sie für 6.0 und höher erstellen, empfehle ich diese neue API.cell!.selectionStyle = .None
gelandet sind, müssen Sie festlegen, welche Kraft die Zelle auspackt, damit Sie auf ihre Eigenschaften zugreifen können.Wenn Sie eine Zeile (oder eine Teilmenge von Zeilen) nicht auswählbar machen möchten , implementieren Sie die
UITableViewDelegate
Methode-tableView:willSelectRowAtIndexPath:
(auch von TechZen erwähnt). Wenn dasindexPath
nicht auswählbar sein soll , geben Sie es zurücknil
, andernfalls geben Sie das zurückindexPath
. Um das Standardauswahlverhalten zu erhalten, geben Sie einfachindexPath
das an Ihredelegate
Methode übergebene zurück. Sie können die Zeilenauswahl jedoch auch ändern, indem Sie ein anderes zurückgebenindexPath
.Beispiel:
quelle
Ab iOS 6 können Sie verwenden
Wenn Sie zurückkehren
NO
, werden sowohl die Auswahlhervorhebung als auch die durch das Storyboard ausgelösten Segmente deaktiviert, die mit dieser Zelle verbunden sind.Die Methode wird aufgerufen, wenn eine Zeile berührt wird. Wenn Sie
NO
zu dieser Nachricht zurückkehren , wird der Auswahlprozess angehalten und die aktuell ausgewählte Zeile verliert nicht ihr ausgewähltes Aussehen, während die Berührung gedrückt wird.UITableViewDelegate-Protokollreferenz
quelle
Keine der obigen Antworten spricht das Problem wirklich richtig an. Der Grund ist, dass wir die Auswahl der Zelle deaktivieren möchten, aber nicht unbedingt die Unteransichten innerhalb der Zelle.
In meinem Fall präsentierte ich einen UISwitch in der Mitte der Reihe und wollte die Auswahl für den Rest der Reihe (die leer ist) deaktivieren, aber nicht für den Schalter! Der richtige Weg, dies zu tun, liegt daher in der Methode
wo eine Erklärung des Formulars
Deaktiviert die Auswahl für die bestimmte Zelle, während der Benutzer gleichzeitig den Schalter betätigen und somit den entsprechenden Selektor verwenden kann. Dies gilt nicht, wenn jemand die Benutzerinteraktion über das deaktiviert
Methode, die lediglich die Zelle vorbereitet und keine Interaktion mit dem UISwitch zulässt.
Darüber hinaus mit der Methode
um die Auswahl der Zelle mit einer Anweisung des Formulars aufzuheben
zeigt weiterhin die ausgewählte Zeile an, während der Benutzer auf die ursprüngliche Inhaltsansicht der Zelle drückt.
Nur meine zwei Cent. Ich bin mir ziemlich sicher, dass viele dies nützlich finden werden.
quelle
willSelectRowAtIndexPath
hat das gleiche Problem. Unteransichten können nicht ausgewählt werden.Mit diesen Datenquellenmethoden fangen Sie Auswahlen ab.
Bei diesen Methoden überprüfen Sie, ob die ausgewählte Zeile ausgewählt werden soll. Wenn dies der Fall ist, ergreifen Sie eine Aktion, wenn nicht, tun Sie nichts.
Leider können Sie die Auswahl nicht für nur einen Abschnitt deaktivieren. Es ist der ganze Tisch oder nichts.
Sie können jedoch die Tabellenzellen gesetzt
selectionStyle
EigenschaftUITableViewCellSelectionStyleNone
. Ich glaube, das wird die Auswahl unsichtbar machen. In Kombination mit den oben genannten Methoden sollten die Zellen aus Sicht des Benutzers völlig träge aussehen.Edit01:
Wenn Sie eine Tabelle haben, in der nur einige der Zeilen auswählbar sind, ist es wichtig, dass sich die Zellen der auswählbaren Zeilen visuell von den nicht auswählbaren Zeilen unterscheiden. Die Chevron-Zubehörschaltfläche ist die Standardmethode, um dies zu tun.
Wie auch immer Sie es tun, Sie möchten nicht, dass Ihre Benutzer versuchen, Zeilen auszuwählen und denken, dass die App fehlerhaft ist, weil die Zeile nichts tut.
quelle
Help -> Developer documentation
diese Methodennamen in das Suchfeld kopieren, um zu sehen, wie es funktioniert. Die Entwicklerdokumentation enthält auch Beispielcode.Für Swift 4.0 zum Beispiel:
quelle
Sie müssen Folgendes tun, um die Zellenauswahl innerhalb der
cellForRowAtIndexPath
Methode zu deaktivieren :Fügen Sie der
tableView:WillDisplayCell:forRowAtIndexPath
Methode Folgendes hinzu, um die ausgegraute Zelle anzuzeigen :Mit einer Methode können Sie die Interaktivität steuern, mit der anderen können Sie das Erscheinungsbild der Benutzeroberfläche steuern.
quelle
Um zu verhindern, dass nur einige Zellen ausgewählt werden, verwenden Sie:
Dies verhindert nicht nur die Auswahl, sondern verhindert auch, dass tableView: didSelectRowAtIndexPath: für die Zellen aufgerufen wird, für die es festgelegt wurde.
quelle
userInteractionEnabled
für eine Zelle (klarer, einen Indexpfad) auf NEIN setze, ist die Benutzerinteraktion einiger ANDERER Zellen deaktiviert. Ich habe keine Ahnung, warum dies jedes Mal passiert, wenn ichuserInteractionEnabled
Zellen in Tabellenansichten verwende. Ist es ein bekannter Fehler oder habe ich etwas falsch gemacht?if [indexPath row] == 0
) nach dem Entfernen der Zelle aufNO
IntableView:cellForRowAtIndexPath:
setze. Normalerweise funktioniert es zuerst in Ordnung. Dann, nach mehreren Anrufen vonreloadData
, ist plötzlich die fünfte Reihe unzulässige Interaktion, dann die vierte Reihe. Ich kann nicht herausfinden, wann es passieren wird. Das Ganze sieht zufällig aus.if [indexPath row] == 0) { set to NO } else { set to YES }
Mit dieser
tableView:willDisplayCell
Methode können Sie alle Arten von Anpassungen an einer tableViewCell vornehmen.In diesem obigen Code kann der Benutzer nur die erste Zeile im zweiten Abschnitt der Tabellenansicht auswählen. Der Rest aller Zeilen kann nicht ausgewählt werden. Danke! ~
quelle
Für schnell:
quelle
Meine Lösung basiert auf Datenmodell:
quelle
Für Swift 4.0 ist dies der Trick. Dadurch wird die Zelle in der didSelectRowAtIndexPath-Methode deaktiviert, die Unteransichten bleiben jedoch anklickbar.
quelle
return indexPath.row == clickableIndex ? indexPath : nil
, hält Ihr Code etwas sauberer ;-)Verwenden Sie diese Option, damit die Zelle so aussieht, als wäre sie deaktiviert und nicht auswählbar:
Wichtig: Beachten Sie, dass dies nur eine Stileigenschaft ist und die Zelle nicht deaktiviert. Dazu müssen Sie
selectionStyle
in IhrerdidSelectRowAtIndexPath:
Delegatenimplementierung nachsehen:quelle
Ich mag Brian Chapados Antwort oben. Dies bedeutet jedoch, dass möglicherweise Logik sowohl in cellForRowAtIndexPath als auch in willSelectRowAtIndexPath dupliziert wurde, was leicht zu einer Synchronisierung führen kann. Anstatt die Logik zu duplizieren, überprüfen Sie einfach den Auswahlstil:
quelle
Ich fand das praktisch, da es sowohl mit statischen als auch mit dynamischen Tabellen funktioniert. Ich setze das Offenlegungskennzeichen nur für die Zellen, die ich auswählen möchte.
quelle
Auf Xcode 7 ohne Codierung können Sie einfach Folgendes tun:
Wählen Sie in der Gliederungsansicht Zellen der Tabellenansicht aus. (Die Zelle ist unter Table View Controller-Szene> Table View Controller> Table View verschachtelt. Möglicherweise müssen Sie diese Objekte offenlegen, um die Table View-Zelle anzuzeigen.)
Suchen Sie im Inspektor für Attribute das Feld Auswahl und wählen Sie Keine aus. atribute inspector Mit dieser Option erhält die Zelle keine visuelle Hervorhebung, wenn ein Benutzer darauf tippt.
quelle
EINFACH
Verwenden Sie einfach
cell.userInteractionEnabled = YES;
die Zelle, wenn sie navigieren kann und aufcell.userInteractionEnabled = NO;
andere Weisequelle
Implementieren Sie nur die Methode
tableView:willSelectRowAtIndexPath:
in der Datenquelle für Ihre Tabelle. Wenn die Zeile am Pfad hervorgehoben werden soll, geben Sie den angegebenen Indexpfad zurück. Wenn Sie dies nicht tun, geben Sie nil zurück.Beispiel aus meiner App:
Das Schöne daran ist, dass
shouldPerformSegueWithIdentifier:sender:
es nicht aufgerufen wird, wenn die obige Methode null zurückgibt, obwohl ich den obigen Test nur der Vollständigkeit halber wiederhole.quelle
Für Xcode 6.3:
quelle
Ich stimme Bryans Antwort zu
wenn ich mache
Dann werden die Unteransichten in der Zelle nicht vom Benutzer interagiert.
Auf der anderen Site Einstellung
löst die didSelect-Methode aus, obwohl die Auswahlfarbe nicht aktualisiert wird.
Mit willSelectRowAt habe ich mein Problem gelöst. Beispiel:
quelle
Wenn
tableView.allowsMultipleSelection = true
Sie Folgendes auswählen, müssen Sie die Auswahl der restlichen Zellen des Abschnitts deaktivieren, wenn Sie Folgendes auswählen:quelle
Für Swift 3.0 können Sie den folgenden Code verwenden, um die Benutzerinteraktion mit der UITableView-Zelle zu deaktivieren
quelle