diejenigen ansprechen, die sagen: „Das ist eine schlechte Idee“, in meinem Fall, denn das ist mein Bedürfnis ist, dass ich eine Taste auf meiner UITableViewCell
haben, die, wenn sie gedrückt wird, ein Übergang in eine andere Ansicht ist. Da dies keine Auswahl für die Zelle selbst ist, funktioniert [self.tableView indexPathForSelectedRow]
nicht.
Dies lässt mich zwei Möglichkeiten:
- Bewahren Sie das Objekt, das ich brauche, sich in der Tabellenzelle in die Ansicht zu übergeben. Während dies funktionieren würde, würde es den Punkt von mir mit einer
NSFetchedResultsController
besiegen, weil ich nicht möchte alle Objekte im Speicher zu speichern, vor allem, wenn die Tabelle lang ist.
- Rufen Sie das Element vom Abrufcontroller mithilfe des Indexpfads ab. Ja, es scheint hässlich, dass ich die
NSIndexPath
durch einen Hack herausfinden muss, aber es ist letztlich weniger teuer als Objekte im Speicher zu speichern.
indexPathForCell:
ist die richtige Methode zu verwenden, aber hier ist, wie ich es tun würde (dieser Code angenommen wird, in einer Unterklasse von UITableViewCell
umgesetzt werden:
// uses the indexPathForCell to return the indexPath for itself
- (NSIndexPath *)getIndexPath {
return [[self getTableView] indexPathForCell:self];
}
// retrieve the table view from self
- (UITableView *)getTableView {
// get the superview of this class, note the camel-case V to differentiate
// from the class' superview property.
UIView *superView = self.superview;
/*
check to see that *superView != nil* (if it is then we've walked up the
entire chain of views without finding a UITableView object) and whether
the superView is a UITableView.
*/
while (superView && ![superView isKindOfClass:[UITableView class]]) {
superView = superView.superview;
}
// if superView != nil, then it means we found the UITableView that contains
// the cell.
if (superView) {
// cast the object and return
return (UITableView *)superView;
}
// we did not find any UITableView
return nil;
}
PS Mein richtigen Code macht den Zugriff alles aus der Tabellenansicht, aber ich gebe ein Beispiel, warum jemand
direkt so etwas wie dies in der Tabellenzelle tun wollen könnte
Genau wie Ihre andere [Frage] (http://stackoverflow.com/questions/15711645/how-to-get-guidableview-from-guidableviewcell) auf die "UITableView" von einer Zelle - warum?Dies scheint wie ein Code-Geruch einer schlechten Designentscheidung zu sein - es gibt nicht viele legitime Anwendungsfälle für eine Zelle, um zu wissen, ob sie indexPath ist oder ob sie auf dem Bildschirm ist oder nicht. –
Ich stimme dem Kommentar von Paul.s zu. Sie sollten angeben, warum Sie dies tun möchten, denn was Sie versuchen, ist wahrscheinlich eine schlechte Idee. – rdelmar
@ Paul.s Ich habe das Design meines Programms in der Frage veröffentlicht. Es kann eine schlechte Programmierpraxis sein, in diesem Fall, wenn Sie eine Alternative vorschlagen könnten, wäre das sehr hilfreich. Ich bin sehr neu in Kakao und relativ neu in der Programmierung im Allgemeinen. –