ios - öffnet - webseite wird nicht richtig angezeigt safari




-didSelectRowAtIndexPath: wird nicht aufgerufen (20)

Achten Sie auf die UITableView-Eigenschaften im Storyboard. In meinem Fall wurde die Combox im Storyboard als "Auswahl: Einzelauswahl" ausgewählt, wodurch die Methode didSelectRowAtIndexPath nicht ausgeführt werden kann.

Ich schreibe eine iOS-App mit einer Tabellenansicht innerhalb einer Registerkartenansicht. In meinem UITableViewController ich -tableView:didSelectRowAtIndexPath: implementiert -tableView:didSelectRowAtIndexPath: aber wenn ich eine Zeile zur Laufzeit auswähle, wird die Methode nicht aufgerufen. Die Tabellenansicht wird jedoch gefüllt, daher weiß ich, dass andere TableView-Methoden in meinem Controller aufgerufen werden.

Hat jemand irgendwelche Ideen, was ich vielleicht vermasselt habe, um dies zu erreichen?


Auch wenn eine andere Antwort akzeptiert wurde, füge ich ein weiteres mögliches Problem und eine Lösung für Leute hinzu, die dieses Problem beobachten:

Wenn die automatische Referenzzählung (ARC) aktiviert ist, stellen Sie möglicherweise fest, dass die Meldungen der Ansicht an den Controller nicht empfangen werden, nachdem ARC den Controller gelöscht hat. Offensichtlich zählt der Stellvertreterzeiger des UITableView nicht als Referenz für das ARC, wenn also der einzige Verweis darauf ist, wird der Controller deallokiert. Sie können überprüfen, ob dies der Fall ist, indem Sie die dealloc-Methode auf dem Controller implementieren und dort einen Haltepunkt oder NSLog-Aufruf festlegen.

Die Lösung besteht darin, den Controller mit einer starken Referenz irgendwo anders zu verfolgen, bis Sie sicher sind, dass Sie ihn nicht mehr benötigen.


Dies war wahrscheinlich nur in meinem Fall, aber ich hatte einige Dateien von einem Backup neu geladen und die Dinge haben nicht funktioniert, einschließlich dieser. Nach einer vollständigen Reinigung (Product> Clean oder Shift + Command + K) funktionierte es. Wahrscheinlich wurde in einem vorkompilierten Header etwas kaputt gemacht. Wahrscheinlich ist das nicht das Problem für Sie, aber es ist einen Versuch wert.


Ein weiterer Fehler, den Sie hätten machen können (wie ich es tat): Wenn Sie einen Übergang in der Zelle setzen, wird didSelectRowAtIndexPath nicht aufgerufen. Sie sollten stattdessen Ihre Segmente am View-Controller einstellen.


Eine andere Sache, die zu dem Problem führen könnte, ist nicht die ausgewählte Auswahlart:

Sollte Single Selection für normale Auswahl sein, sollte keine No Selection .


Es klingt, als ob die Klasse nicht das UITableViewDelegate für diese Tabellenansicht ist, obwohl UITableViewController das automatisch UITableViewController soll.

Gibt es eine Chance, dass Sie den Delegaten auf eine andere Klasse zurücksetzen?


Für den Fall, dass jemand den gleichen dummen Fehler gemacht hat wie ich:

Überprüfen Sie, ob der Methodenname dessen, was Sie erwarten, didSelect sein, versehentlich didDeselect . Es hat ungefähr zwei Stunden gedauert, bis ich es herausgefunden habe ...



Ich gebe meine 2 Cent dazu.

Ich hatte eine benutzerdefinierte UITableViewCell und es gab eine Schaltfläche, die die gesamte Zelle abdeckte. Wenn die Berührung stattfand, wurde die Schaltfläche ausgewählt und nicht die Zelle.

Entweder entferne den Knopf oder in meinem Fall setze ich User Interation Enable auf false auf der Schaltfläche, so dass die Zelle ausgewählt wurde.


Ich habe in diesen Situationen zwei Dinge erlebt.

  1. Möglicherweise haben Sie vergessen, das UITableViewDelegate-Protokoll zu implementieren, oder es gibt keine Delegierungsstelle zwischen Ihrer Klasse und Ihrer Tabellenansicht.

  2. Möglicherweise haben Sie eine UIView in Ihrer Zeile, die ein Ersthelfer ist und Ihre Klicks entfernt. Sag ein UIButton oder etwas Ähnliches.


Ich hatte das gleiche Problem. Und es war schwer zu finden. Aber irgendwo in meinem Code war das:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    return nil;
}

Es muss zurückgegeben werden return indexPath , else -tableView:didSelectRowAtIndexPath: wird nicht aufgerufen.


Ich hatte einen UITapGestureRecognizer in meiner Tabellenansicht platziert, um die Tastatur, die didSelectRowAtIndexPath: verhindert hat, zu didSelectRowAtIndexPath: . Hoffe es hilft jemandem.


Ich weiß, ist alt und das Problem wurde gelöst, aber ein ähnliches Problem hatte, dachte ich, dass das Problem mit meiner benutzerdefinierten UITableViewCell war, aber die Lösung war völlig anders - ich starte XCode :) und funktioniert dann ok! fast wie Windows :)


In meinem Fall berechne ich dynamisch die Höhe des TableView SuperView zur Ladezeit. Aufgrund einer Fehlkalkulation wurde das TableView außerhalb des SuperView . Die TableView wurde gut gezeichnet, aber alle Interaktion wurde deaktiviert (und didSelectRowAtIndexPath wurde nie aufgerufen). Sehr schwer zu erkennen, da kein visueller Hinweis darauf TableView , dass das TableView nicht "erreichbar" ist.


Keine dieser Antworten funktionierte für mich. Nach ungefähr einer Stunde habe ich etwas sehr Heimtückisches herausgefunden:

Ich habe eine Tabellenansicht in einer Zelle einer anderen Tabellenansicht. Ich entschied mich, eine umschließende Ansicht zu erstellen, die unter anderem die innere Tabellenansicht enthält. Ich nannte diese Ansicht contentView und verband sie in der xib.

Es stellt sich heraus, dass UITableViewCell bereits eine contentView hat und seltsame Dinge damit macht. Das Problem löste sich selbst, als ich die Eigenschaft in mainContentView umbenannte und die Ansicht wieder mit dieser umbenannten Eigenschaft verknüpfte.


Mein Problem war keines der oben genannten. Und so lahm. Aber ich dachte, ich würde es hier auflisten, falls es jemandem hilft.

Ich habe einen tableViewController , der mein "Basis" -Controller ist, und dann erstelle ich Unterklassen dieses Controllers. Ich schrieb meinen gesamten Code in der Routine " tableView:didSelectRowAtIndexPath in der Klasse "base". Ganz zu schweigen davon, dass diese Routine standardmäßig auch in allen meinen Unterklassen erstellt wurde (allerdings ohne Code, der irgendetwas getan hat). Also, als ich meine App lief, lief es die Unterklasse-Version des Codes, tat nichts und machte mich traurig. Sobald ich also die Routine aus den Unterklassen entfernt habe, hat sie die mt "base" Klassenroutine benutzt und ich bin im Geschäft.

Ich kenne. Lach nicht. Aber vielleicht wird das jemandem die Stunde retten, die ich verloren habe ...


Sie müssen diese Optionen auswählen

Aber wenn Sie möchten, dass uitableview beim Klicken nicht hervorgehoben wird, sollten Sie Änderungen an den Eigenschaften von UITableViewCell vornehmen ... Wählen Sie die Option Keine für die Auswahl ... genau wie ...


Wenn Sie dies lesen, löst das Problem nicht.

Ich habe eine benutzerdefinierte Zelle, in der das Kontrollkästchen " Benutzerinteraktion aktiviert " deaktiviert war. Also, ich schalte es einfach an. Viel Glück.


Wenn das Problem mit UITapGestureRecognizer auftritt, können Sie Folgendes beheben:

  • im Storyboard:

  • im Code mit Objective-C:

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)]; 
    [self.view addGestureRecognizer:tap];
    
    [tap setCancelsTouchesInView:NO];
    
  • im Code mit Swift:

    let tap = UITapGestureRecognizer(target: self, action:Selector("dismissKeyboard"))
    view.addGestureRecognizer(tap)
    
    tap.cancelsTouchesInView = false
    

Wenn sich Ihre Tabellenansicht im Bearbeitungsmodus befindet (z. B. [tableView setEditing:YES animated:NO]; ), müssen Sie tableView.allowsSelectionDuringEditing = YES;





didselectrowatindexpath