Wie erhalten Sie die Zeile für eine Schaltfläche in einer View-basierten Tabelle, wenn Sie auf die Schaltfläche klicken? Die Zeile ist nicht ausgewählt, wenn auf die Schaltfläche geklickt wird, aber ich habe festgestellt, dass wenn Sie sender.superview.superview in der Aktionsmethode der Schaltfläche protokollieren, NSTableRowView: 0x1001b3a90 - row: 2. Die Zeile befindet sich also im Protokoll. aber ich weiß nicht, wie ich programmatisch darauf zugehen soll. Ich habe die Aktionsmethode der Schaltfläche in einer Unterklasse von NSTableCellView.Holen Sie sich die Schaltfläche Zeile in View-basierte Tabelle
Antwort
-[NSTableView rowForView:]
sagt dies in seiner Dokumentation:
Diese Regel im Aktionsverfahren für einen NSButton (oder NSControl) benötigt wird, um herauszufinden, welche Zeile (und Spalte) die Aktion auf durchgeführt werden sollte.
Hier gebe ich Ihnen ein einfaches Beispiel. In diesem bin ich ein UIButton in der Inhaltsansicht hinzufügen. Wenn ich auf die Schaltfläche geklickt rufe ich eine Methode und dort bekomme ich Zeilennummer und rufen Sie wie ich
//Adding a button
UIButton *btnBuyer=[UIButton buttonWithType:UIButtonTypeCustom];
btnBuyer.frame=CGRectMake(238, 10, 26, 32);
btnBuyer.tag=indexPath.row;
[btnBuyer setImage:[UIImage imageNamed:@"buyIcon.png"] forState:UIControlStateNormal];
[btnBuyer addTarget:self action:@selector(goBuyTab:)forControlEvents:UIControlEventTouchUpInside];
[cellNew.contentView addSubview:btnBuyer];
erforderlich, und wenn Benutzer auf diese Klicks habe ich Id aus der folgenden Methode
-(void)goBuyTab:(UIButton *)sender{
NSLog(@"after click buy button function called goBuyTab");
NSLog(@"sender.tag in goBuyTab : %d",sender.tag);
int selectedRow=sender.tag;// This is row number
}
Hope this ist was du verlangst.
in osx können Sie diese Zelle Aktionsmethode in Ihrer Schaltfläche in der Steuerung verwenden:
- (IBAction)yourMethod:(NSButtonCell *)sender {
NSInteger selected = [yourTableView selectedRow];
NSLog(@"sender sends :%ld", selected);
}
benötigen Sie einen Austritt aus der Steuerung zum NSTableView
einzustellen.
Dies funktioniert nicht immer, da es durchaus möglich ist, auf eine Schaltfläche in einer Zeile zu klicken, ohne die zugrunde liegende Zeile auszuwählen. – Ely
Es funktioniert auch nicht, weil (in einer zellenbasierten Tabellenansicht) 'sender' das' NSTableView' ist, nicht das 'NSButtonCell'. –
ich diesen Code teilen für Swift 4.
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
........
but.action = #selector(ViewController.buttonAction)
.........
}
@objc func buttonAction(but: NSButton){
let tablerow: NSTableRowView = but.superview?.superview as! NSTableRowView;
let index = table?.row(for: tablerow);
print("\(index));
}
- 1. Holen Sie sich die Daten in Zeilen
- 2. Wie die ausgewählte Tabelle tr Zeile in diesem Fall holen
- 3. Holen Sie sich die Datenbankversion in Meteor
- 4. Holen Sie sich Tabelle <tr>, wenn geklickt wird
- 5. Holen Sie sich eine Zeile Nummer von SQL-Abfrage
- 6. Schaltfläche Hinzufügen automatisch Tabelle Zeile
- 7. Holen Sie sich den letzten Eintrag in einer MySQL-Tabelle
- 8. Holen Sie die Zeile neben der Zeile bekam mit DataTable.Select()
- 9. Holen Sie sich Fotoreferenz
- 10. Swift - Holen Sie sich die Länderliste
- 11. Sitecore/GlassMapper Holen Sie sich die Seite
- 12. Android: Holen Sie sich die TextView in OnItemClickListener() von ListView
- 13. Android - Holen Sie sich die Bildquelle
- 14. Holen Sie sich die IDs mehrerer Dateien
- 15. Holen Sie sich die Konsolenprotokoll von chrome
- 16. Holen Sie sich die Daten mit Schlüsselwerten
- 17. Holen Sie sich die letzte Checkbox
- 18. Holen Sie sich die Array-Elemente
- 19. Holen Sie sich die zuletzt gedrückte Tastaturtaste
- 20. Holen Sie sich die BlackBerry-Gerätenummer
- 21. Holen Sie sich die ec2-Konfigurationsinformationen
- 22. Holen Sie sich die Anzahl der Zeilen in einer HTML-Tabelle
- 23. Holen Sie sich die Zusammenstellung schnell wieder
- 24. Holen Sie sich die Subdomain als Parameter
- 25. Woocommerce: Holen Sie sich die aktuelle Produktkategorie
- 26. Holen Sie sich die abwechselnden Reihen in SQL
- 27. Holen Sie sich eine Tabelle letzte Zeile als Array Felder Daten zu verwenden
- 28. Holen Sie sich die neuesten Zeilen nach Datum von Aggregat
- 29. MySQL - Holen Sie sich Datum Spalte aus einer Tabelle
- 30. Holen Sie sich die oberste Zeile nach der Bestellung von in Oracle Subquery
Danke, das ist das, was ich brauchte. Ich kann die Tabellenansicht in der Aktionsmethode der Schaltfläche von sender.superview.superview.superview und die Ansicht von sender.superview erhalten – rdelmar
Die Aktion sollte an einen Controller gesendet werden, und dieser Controller sollte die Tabellenansicht kennen. Es sollte eine Steckdose haben. Also sollte es nicht notwendig sein, der Superview-Kette zu folgen. Und Sie können "sender" einfach als Argument für "-rowForView:" übergeben, da es die Zeile mit der Ansicht direkt oder indirekt nachschlägt. –
Ich habe ein paar Tests gemacht, nur um zu sehen, wie ich verschiedene UI-Elemente in einer View-basierten Tabelle manipulieren kann. Anfangs hatte ich die Aktionsmethode im App-Delegate (der Einfachheit halber) und wurde nie aufgerufen. Dann lege ich es in die benutzerdefinierte Tabellenzellenansicht, weil ich irgendwo gelesen habe, dass es dort sein sollte. Wie Sie in Ihrem Kommentar gesagt haben, scheint es wirklich, dass es in einem Controller-Objekt sein sollte, aber gibt es einige Einschränkungen, wohin es gehen kann, damit es funktioniert? Warum hat es im App-Delegierten nicht funktioniert? Ich bin mir nicht sicher, wie die Responder-Kette für eine View-basierte Tabelle aussieht. – rdelmar