Je recherche une solution facile pour supprimer NSTableView lignes en appuyant sur la touche DELETE. P>
Tout ce que j'ai vu lors de la recherche dans Google, des réponses comme ceci: http://likethough.com/Lockfocus/2008/04/a -Slight-améliorés-NSTableView / P>
Cela me semble une solution d'ingénierie, mais j'aimerais savoir si c'est le meilleur moyen. Est-ce que quelqu'un connaît une meilleure réponse? p>
4 Réponses :
Ce que je fais habituellement est de créer un nouvel élément de menu dans la barre de menus de votre application. Quelque chose comme: p>
Ensuite, vous pouvez lier que L'avantage de faire un Fichier -> Supprimer $ {Nom de l'élément} CODE> P>
nsmenuitem code> dans l'interface Builder sur une méthode d'ibaction définie quelque part sur votre délégué de l'application ou un autre contrôleur. La mise en œuvre de cette méthode devrait supprimer l'élément de votre modèle et rafraîchir le
NSTableView code>. P>
nsmenuitem code> hors de l'action est que: p>
Salut, Craig. Votre réponse n'était pas ce que je m'attendais vraiment, mais ça sonne plutôt bien! = D Merci beaucoup.
Haha Yea, au début, il ressemble à une approche assez indirecte, mais cela fonctionne extrêmement bien et s'occupe de beaucoup de mal de tête.
@peeetonn Si vous avez deux vues de table, vous pouvez simplement vérifier lequel se concentre sur votre mise en œuvre de la méthode. Et vous pouvez également ajouter un auditeur de focus si vous souhaitez mettre à jour de manière dynamique l'élément de menu.
Est-ce une action «globale» ou est-elle automatiquement appliquée directement au contrôle de la commande?
J'ai implémenté quelque chose de similaire à ltkeypressTableView code>. Cependant, j'utilise des contrôleurs de tableau, donc dans ma sous-classe, j'ai ajouté
iboutlet nsarraycontroller * likeachraycontroller code>. Au lieu de manipuler la demande de suppression de la demande dans un délégué, je le gère directement dans la sous-classe, car ma sous-classe traite spécifiquement d'ajouter une manipulation de la clé Suppr. Lorsque je détecte KeyPress pour Supprimer la clé, j'appelle simplement
[liaparrayController Supprimer: nil]; code>. > IRTAbleview.h: p>
#import "IRTableView.h"
@implementation IRTableView
- (void)keyDown:(NSEvent *)event
{
// Based on LTKeyPressTableView.
//https://github.com/jacobx/thoughtkit/blob/master/LTKeyPressTableView
id delegate = [self delegate];
// (removed unused LTKeyPressTableView code)
unichar key = [[event charactersIgnoringModifiers] characterAtIndex:0];
if(key == NSDeleteCharacter)
{
if([self selectedRow] == -1)
{
NSBeep();
}
BOOL isEditing = ([[self.window firstResponder] isKindOfClass:[NSText class]] &&
[[[self.window firstResponder] delegate] isKindOfClass:[IRTableView class]]);
if (!isEditing)
{
[relatedArrayController remove:nil];
return;
}
}
// still here?
[super keyDown:event];
}
@end
Après 10.10, NsviewController fait partie de la chaîne du répondeur. Donc, le moyen le plus simple est de mettre en œuvre la clé de votre sous-classement NsviewController P>
Bon point sur l'utilisation de la chaîne du répondeur pour éviter le sous-classement (dans la mesure du possible).
Il n'y a pas besoin de sous-classement et d'attraper L'élément de menu code> Supprimer code> dans le menu dans le contrôleur d'affichage Implémentez la méthode Swift: Objective-C: et mettre dans la logique pour supprimer la vision de la table. P> li>
ul> clé code> dans
nsviewcontroller code>. p>
Modifier code> est connecté au sélecteur
Supprimer: code> du premier répondeur. S'il n'y a pas d'élément de menu code> Supprimer code>, créez-en un et connectez-le à
Supprimer: code> du premier répondeur (cube rouge). P>
ibaction p>
@ibaction Func Suppr Suppr (_ Sender: AnyObject) CODE> P>
- (ibaction) Supprimer: (ID) Sender CODE> P>
@isavadevru S'il vous plaît écrivez en anglais.
S'il vous plaît écrivez en russe :) Qui a besoin, il comprendra. Je me sens mal à l'aise en lisant l'anglais. Mais j'ai lu et traduis, mais c'est difficile pour vous? :)
Vadian, Ваш пример Годится отчасти. Некая путаница с логикой будет, лишняя нагрузка. Подкласс будет отвечать только за свой объект. Лишних забот не нужно делать.
Je traduit en anglais. Vadian, votre exemple est en partie approprié. Il y aura une certaine confusion avec la logique, une charge supplémentaire. Une sous-classe sera responsable que pour son objet. Aucune inquiétude supplémentaire doit être faite.
La langue communautaire i> de Stackoverflow est l'anglais, mais il y a aussi un forum russe
Je connais. Alors, qu'est-ce que la prochaine est? Les questions ici et il y a différents. Néanmoins, je me suis inscrit ici quand il n'y avait pas de forum russe. Cela ne change rien. Les gens parlent la langue dans laquelle il convient.
Cela ne vaut pas la peine de discuter de cela. Qui a besoin de ça, il comprendra. Ne pas, passez par.
Je suis ici 7 ans, vous avez 3 ans. Prendre note.
Mais bien sûr, votre réponse a le droit d'être dans des applications simples ou pour AppleScriptobjc. Je mets un plus.
Merci @vadian, il s'agit d'une méthode élégante.
Est-ce une action «globale» ou est-elle automatiquement appliquée directement au contrôle de la commande?
C'est un moyen de le faire - une "solution d'entrée"; Créez Alternate B> éléments de menu - mais assurez-vous de ne pas marquer comme tel dans IB - ils sont distincts!, pour les touches