Ich habe eine benutzerdefinierte Zubehöransicht (ein UIButton) auf meiner Prototypzelle in einem Storyboard. Wenn ich auf diese Schaltfläche klicke, wird die Delegate-Methode für die angezapfte Zubehörtaste nicht aufgerufen. Wenn ich einen standardmäßigen Offenbarungsknopf verwende, heißt das einfach gut. Ich gehe davon aus, dass ich irgendwo einen Haken verpasse. Jeder weiß wo?Benutzerdefinierte Zubehöransicht auf UITableView-Prototypzelle, die nicht ausgelöst wird
Antwort
Ich habe am Ende mit einem Protokoll für benutzerdefinierte Tabellenzellen umgehen.
CustomAccessoryTableCellDelegate.h
@protocol CustomAccessoryTableCellDelegate <NSObject>
@required
- (void) accessoryButtonTappedForCell: (UITableViewCell *) cell;
@end
CustomAccessoryViewTableCell.h
@interface CustomAccessoryViewTableCell : UITableViewCell
/** The custom accessory delegate. */
@property (nonatomic, weak) id<CustomAccessoryTableCellDelegate> delegate;
@end
CustomAccessoryViewTableCell.m
- (IBAction) buttonAction:(id)sender{
if ([self.delegate respondsToSelector:@selector(accessoryButtonTappedForCell:)]) {
[self.delegate accessoryButtonTappedForCell:self];
}
}
Innen Table View-Controller
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath{
CustomAccessoryViewTableCell *cell = [tableView
dequeueReusableCellWithIdentifier:@"MyCustomCell"];
cell.label.text = @"Some Name";
cell.delegate = self;
return cell;
}
#pragma mark - Custom Accessory View Delegate
- (void) accessoryButtonTappedForCell:(UITableViewCell *)cell{
[self tableView:self.writerTable
accessoryButtonTappedForRowWithIndexPath: [self.writerTable
indexPathForCell:cell]];
}
Raten 1: Sie wirklich nicht haben eine „individuelle Accessoire Ansicht“ Sie haben eine UIButton
, die platziert wird, in dem ein Zubehörteil gehen. Dies würde die angeklopfte Taste des Delegierten-Zubehörs nicht auslösen, da sie nicht wirklich ein Zubehörteil ist.
Vermutung 2: Sie haben eine echte Zubehör Blick haben, aber es wird nie die „tap“ Ereignis bekommen, weil Sie eine UIButton
darin haben, die die Interaktion mit dem Benutzer isst, sondern eine Aktion nicht feuern. Versuchen Sie in diesem Fall, stattdessen eine einfache UIView
hinzuzufügen.
Ansonsten brauche ich mehr Informationen.
Ich habe versucht, stattdessen eine Bildansicht zu verwenden, die keinen Unterschied machte. Die Schaltfläche ist an die Eigenschaft accessoryView der UITableViewCell angeschlossen. Gibt es keine Möglichkeit, das programmgesteuert von einer UITableViewCell-Unterklasse aufzurufen? – smokingoyster
Überprüfen Sie in Ihrem 'cellForRowAtIndexPath', nachdem Sie die Zelle abgerufen haben, ob Ihre' accesoireView'-Eigenschaft einen Verweis auf Ihre Ansicht hat oder ob sie 'nil' ist. Wenn es in IB richtig eingerichtet ist, sollte es existieren. – DBD
Ich zeige den Button/view/was auch immer ich da habe. Scheint so, als handele es sich nur um das Abgriffsereignis auf seinen eigenen definierten Zubehöransichtstypen. Und es scheint keinen guten Weg zu geben, dies programmatisch von der Tabellenzelle aus zu tun. Am Ende habe ich ein benutzerdefiniertes Protokoll verwendet, auf das ich eine Antwort geben werde. – smokingoyster
Apfel docs für das Zubehör Delegatmethode sagt
Der Delegierte in der Regel an den Wasserhahn auf der Offenbarung Taste reagiert (die Zubehöransicht) durch eine neue Sicht auf die ausgewählte Zeile im Zusammenhang darzustellen. Diese Methode wird nicht aufgerufen, wenn für die Zeile in IndexPath eine Zubehöransicht festgelegt ist.
so ist es nicht für benutzerdefinierte Zubehöransichten aufgerufen. Es ist ein Standardverhalten.
- 1. Benutzerdefinierte Validator wird nicht ausgelöst
- 2. Warum wird die TaskScheduler.UnobservedTaskException nicht ausgelöst?
- 3. WPF-Abhängigkeitseigenschaften-Setter wird nicht ausgelöst, wenn PropertyChanged ausgelöst wird, aber der Quellwert nicht geändert wird
- 4. OnLongClickListener wird nicht auf ViewPager ausgelöst
- 5. js.erb wird nicht ausgelöst
- 6. OnNavigatedTo wird nicht ausgelöst?
- 7. LoadControlState wird nicht ausgelöst
- 8. commitEditingStyle wird nicht ausgelöst
- 9. daterangepicker wird nicht ausgelöst
- 10. Warum wird die Ausnahme hier nicht ausgelöst?
- 11. ng-Klasse wird nicht auf benutzerdefinierte Anweisung
- 12. JQuery.getJson wird nicht richtig ausgelöst
- 13. MVC 5 benutzerdefinierte Validierung Attribut nicht ausgelöst
- 14. PreRender-Ereignis wird nicht ausgelöst
- 15. jqgrid wird nicht ausgelöst, wenn die EINGABETASTE gedrückt wird
- 16. BindingList.ListChanged Ereignis wird nicht ausgelöst, wenn die Eigenschaft geändert wird
- 17. "Backbutton" Ereignis wird nicht ausgelöst
- 18. Benutzerdefinierte Ereignisse können nicht ausgelöst werden
- 19. Chrome AutoFill wird nicht ausgelöst
- 20. Warum wird nach dem mouseDown -Ereignis auf demselben Element nicht ausgelöst, wenn ein Ereignis ausgelöst wird?
- 21. Wenn Validierungsausnahme ausgelöst wird?
- 22. Drools: Regel 2 wird nicht ausgelöst, während Regel 1 intern ausgelöst wird (tritt in die Schleife)
- 23. Warum wird die OnDeserialisierung nicht für die XML-Deserialisierung ausgelöst?
- 24. PostAuthenticateRequest wird mehrmals ausgelöst
- 25. Die Zubehöransicht des Druckfelds wird in OS X 10.11, aber nicht in 10.10 und 10.9 angezeigt.
- 26. Redirect asp.net mvc, wenn benutzerdefinierte Ausnahme ausgelöst wird
- 27. Warum wird dieses Onpaste-Ereignis nicht ausgelöst?
- 28. Warum das Hashchange-Ereignis nicht auf www.google.com ausgelöst wird?
- 29. Benutzerdefiniertes UITableViewCell mit automatischer Layout- und Zubehöransicht
- 30. OnClick-Ereignis wird nicht ausgelöst, wenn Sie die Maus bewegen
Ich verwende eine UITableViewCell-Unterklasse und entwerfe die Zelle im Interface Builder. Ich mache es nicht von der Tabellenansicht Controller. Ich muss aus dieser Unterklasse herausrufen. – smokingoyster