मैं हटाएं कुंजी दबाकर NSTableView पंक्तियों को हटाने का एक आसान समाधान ढूंढ रहा हूं। मैंने देखा है कि Google में खोज करते समय इस तरह के उत्तर दिए गए थे: http://likethought.com/lockfocus/2008/04/a-slightly-improved-nstableview/। यह मुझे एक इंजीनियरिंग समाधान लगता है, लेकिन मैं जानना चाहता हूं कि यह सबसे अच्छा तरीका है या नहीं। क्या कोई भी बेहतर जवाब जानता है?NSTableView + हटाएं कुंजी
उत्तर
मैंने LTKeyPressTableView
के समान कुछ लागू किया है। हालांकि, मैं सरणी नियंत्रकों का उपयोग करता हूं, इसलिए मेरे सबक्लास में मैंने IBOutlet NSArrayController * relatedArrayController
जोड़ा। एक प्रतिनिधि में डिलीट अनुरोध को संभालने के बजाय, मैं इसे सबक्लास में सीधे संभालता हूं क्योंकि मेरा सबक्लास विशेष रूप से हटाएं कुंजी को संभालने के साथ संबंधित है। जब मैं डिलीट कुंजी के लिए कीप्रेस का पता लगाता हूं, तो मैं बस [relatedArrayController delete:nil];
पर कॉल कर रहा हूं।
IRTableView.h:
#import <Cocoa/Cocoa.h>
@interface IRTableView : NSTableView {
IBOutlet NSArrayController * relatedArrayController;
}
@end
और IRTableView.m:
#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
अंत परिणाम मेरे लिए काफी आईबी के अनुकूल है, और एक कोको बाइंडिंग + कोर में उपयोग के लिए एक काफी सरल समाधान डेटा एप्लीकेशन
मैं आमतौर पर जो करता हूं वह आपके एप्लिकेशन के मेनू बार में एक नया मेनू आइटम बनाता है। कुछ की तरह:
File -> Delete ${Name of Item}
तो फिर तुम एक IBAction विधि या तो अपने अनुप्रयोग प्रतिनिधि या किसी अन्य नियंत्रक पर कहीं न कहीं परिभाषित करने के लिए बात करने के लिए इंटरफ़ेस बिल्डर में है कि NSMenuItem
लिंक कर सकते हैं। इस विधि के कार्यान्वयन को आपके मॉडल से आइटम को हटाना चाहिए, और NSTableView
रीफ्रेश करना चाहिए।
- आप आइटम इंटरफ़ेस बिल्डर में कीबोर्ड शॉर्टकट दे सकते हैं:
लाभ एक
NSMenuItem
कार्रवाई से बाहर करने के लिए है। (हटाएं कुंजी की तरह।) - उपयोगकर्ता जो आपके एप्लिकेशन से परिचित नहीं हैं, डिलीट कुंजी दबाए जाने से डरते हैं, या किसी भी कारण से कीबोर्ड तक पहुंच नहीं है, फिर भी इस कार्यक्षमता का उपयोग कर सकते हैं।
10.10 के बाद, NSViewController उत्तरदाता श्रृंखला का हिस्सा है। तो सबसे आसान तरीका है अपने उप-वर्गीकृत NSViewController
सबक्लासिंग (जहां संभव हो) से बचने के लिए प्रतिक्रियाकर्ता श्रृंखला का उपयोग करने के बारे में अच्छा बिंदु। –
NSViewController
में keyDown
को उपclass और पकड़ने की आवश्यकता नहीं है।
Delete
मेनू में मेनू आइटम Edit
पहले उत्तरदाता के चयनकर्ता delete:
से जुड़ा हुआ है। यदि Delete
मेनू आइटम नहीं है, तो एक बनाएं और इसे पहले उत्तरदाता (लाल घन) के delete:
से कनेक्ट करें।
Delete
मेनू आइटम (⌫ या ⌘⌫) दृश्य नियंत्रक मेंके लिए एक महत्वपूर्ण बराबर निरुपित
IBAction
तरीका लागूस्विफ्ट:
@IBAction func delete(_ sender: AnyObject)
Objective- सी:
-(IBAction)delete:(id)sender
और तालिका दृश्य पंक्ति को हटाने के लिए तर्क में डाल दिया गया है।
हाय, क्रेग। आपका जवाब वह नहीं था जो मैं वास्तव में उम्मीद कर रहा था, लेकिन यह बहुत अच्छा लगता है! = डी बहुत बहुत धन्यवाद। – Leandro
हाहा हाँ, सबसे पहले यह एक सुंदर अप्रत्यक्ष दृष्टिकोण की तरह लगता है, लेकिन यह बहुत अच्छी तरह से काम करता है, और बहुत सारे सिरदर्द का ख्याल रखता है। –
जब तक आपके पास दो टेबल दृश्य नहीं हैं ... – peetonn