जब कोई उपयोगकर्ता NSTableView
में पंक्ति पर डबल क्लिक करता है तो मुझे विंडो खोलने के लिए अपने एप्लिकेशन की आवश्यकता होती है। मुझे इसे पूरा करने के तरीके पर जानकारी या उदाहरण खोजने में थोड़ा मुश्किल समय है। क्या कोई मुझे सही दिशा में निर्देशित कर सकता है?कोको में एक एनएसटीबल व्यू पंक्ति डबल क्लिक करें?
उत्तर
एनएसटीबल व्यू पर -setDoubleAction:
विधि पर एक नज़र डालें; आप इसे उस विधि पर सेट कर सकते हैं जिसे सामान्य लक्ष्य-क्रिया प्रणाली की तरह ही बुलाया जाएगा लेकिन डबल-क्लिक पर।
उस क्रिया विधि में, -clickedRow
उपयोगी होगा।
कोको को अन्य नवागंतुकों के लाभ के लिए @JimPuls उत्तर में अधिक बुनियादी जानकारी जोड़ना।
- एनएसटीबल व्यू के लिए एक आईबीओलेट एक इंटरफ़ेस में घोषित करने की आवश्यकता है। मुझे लगता है कि तालिका के प्रतिनिधि में ऐसा करना पसंद है।
- तालिका में आईबीओलेट को इंटरफ़ेस बिल्डर के माध्यम से कनेक्ट करने की आवश्यकता है। ऐसा करने के लिए Ctrl-drag & कक्षा में आईबी में ड्रॉप करें जो तालिका दृश्य में आउटलेट घोषित करता है। जब आप अपना माउस छोड़ते हैं तो पॉपअप को चरण # 1 में घोषित आउटलेट के नाम से दिखाई देना चाहिए। इसे चुनें।
- @ अनुमोदन अनुभाग में, -वेकफ्रॉमनिब विधि पर, कॉल -सेट लक्ष्य: और -सेट दोहराव: चरण # 1 में घोषित आईबीओलेट पर और चरण # 2 में कनेक्ट किया गया।
यहां मेरे तालिका दृश्य प्रतिनिधि से एक अंश है। मेरे पास मेरे प्रतिनिधि भी डेटासोर्स के रूप में स्थापित हैं, इसलिए यही कारण है कि आप इसके साथ जुड़े एनएसटीबल व्यू डिलीगेट और एनएसटीएबी व्यूडेटासोर्स इंटरफेस दोनों देखेंगे।
// इंटरफेस अंश।
@interface MyTableViewDelegate : NSObject <NSTableViewDelegate, NSTableViewDataSource>
{
// This iVar needs to be connected to the table view via the IB.
IBOutlet NSTableView *tableOutlet;
}
@property (assign) IBOutlet NSTableView *tableOutlet;
- (void)doubleClick:(id)nid;
@end
// कार्यान्वयन अंश।
@implementation MyTableViewDelegate
@synthesize tableOutlet = _tableOutlet;
- (void)awakeFromNib {
[_tableOutlet setTarget:self];
[_tableOutlet setDoubleAction:@selector(doubleClick:)];
}
- (void)doubleClick:(id)object {
// This gets called after following steps 1-3.
NSInteger rowNumber = [_tableOutlet clickedRow];
// Do something...
}
उम्मीद है कि इससे मदद मिलती है।
आप बाइंडिंग के साथ एक ही बात कर सकते हैं, सब से पहले ज फ़ाइल
-(IBAction)openWindow:(id)sender
मीटर फ़ाइल में में एक mentod घोषित लागू ही
-(IBAction)openWindow:(id)sender
{
//do something here;
}
कि निब को मिला, जहां आपके तालिका दृश्य मौजूद है, तालिका दृश्य का चयन करें और विशेषता निरीक्षक का दूसरा अंतिम टैब प्राप्त करें, डबल सीआईसीएल तर्क प्रकटीकरण त्रिकोण जांच खोलें फॉक्स का चयन फ़ाइल के स्वामी को जांचने के लिए बाध्य करें, मॉडल कुंजी पेट "स्वयं" होना चाहिए, चयनकर्ता का नाम "ओपनविंडो: ", एक ही प्रक्रिया" डबल क्लिक लक्ष्य "प्रकटीकरण के साथ करती है पुनः, यह
जैसा कि पीआर सिंह ने कहा था, आप कोको बाइंडिंग का उपयोग कर सकते हैं, आप चयनित ऑब्जेक्ट्स के साथ भी पास कर सकते हैं।
अपने टेबल देखें आईबी में तो बाइंडिंग निरीक्षक में इन दो बाइंडिंग सेट अप के रूप में इस का चयन करें:
>Double Click Target bind to = Application delegate object (or file owner) model key path = self selector name = myMethod: >Double Click Argument bind to = array controller controller key = selectedObjects selector name = myMethod:
कहाँ MyMethod
- (void)myMethod:(NSArray*)selectedObjects
{
NSLog(@"%@", selectedObjects);
}
के रूप में कार्यान्वित किया जाता है यह भी है यहां प्रलेखित: https://developer.apple.com/library/mac/qa/qa1472/_index.html
एक आकर्षण की तरह काम किया। – groomsy
अगर कोई स्विफ्ट 2.0 संस्करण की तलाश करता है: यह मेरे लिए काम करता है। उद्देश्य सी कोड से कहीं अधिक आसान लगता है।
@IBOutlet weak var searchResultTable: NSTableView!
override func viewDidLoad() {
super.viewDidLoad()
searchResultTable.doubleAction = "doubleClickOnResultRow"
}
func doubleClickOnResultRow()
{
print("doubleClickOnResultRow \(searchResultTable.clickedRow)")
}
यह वास्तव में सहायक है। उन लोगों के लिए 'डबलएक्शन' के बारे में अधिक जानना चाहते हैं, यह [लिंक] देखें (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTableView_Class/index.html#//apple_ref/OCC/instp/NSTableView/doubleAction)। –
स्विफ्ट 3 के लिए, फ़ंक्शन चयनकर्ता 'searchResultTable.doubleAction = #selector (doubleClickOnResultRow) ' –
आप इंटरफ़ेस बिल्डर में डबल क्लिक कार्रवाई को तार कर सकते हैं। अपने टेबल व्यू पर नियंत्रण-क्लिक करें (सुनिश्चित करें कि आपको कनेक्शन कनेक्शन प्राप्त करने के लिए तालिका दृश्य, स्क्रॉल व्यू या क्लिप व्यू या टेबल कॉलम नहीं मिल रहा है)। "प्रेषित क्रियाएं" अनुभाग में "डबलएक्शन" आइटम ढूंढें। इसे अपनी पसंद के आईबीएक्शन से कनेक्ट करें।
आसान निचोड़ नींबू peasy होगा। आप तालिका दृश्य के क्लिक की गई विधि विधि से क्लिक की गई पंक्ति प्राप्त कर सकते हैं। आपको अभी भी उत्तर संख्या दो में वर्णित आउटलेट की आवश्यकता है। –
आपको तालिका दृश्य से जुड़े आउटलेट की आवश्यकता नहीं है, क्योंकि तालिका दृश्य स्वयं को क्रिया संदेश के प्रेषक तर्क के रूप में प्रदान करता है। –
इच्छा है कि मैंने इसे अपने स्वयं के इशारा पहचानकर्ता रोलिंग में खोदने से पहले देखा था ... – ghostatron
क्या आईबी के माध्यम से इसे जोड़ने का कोई तरीका है? –
सेटटाइटल के साथ तालिका दृश्य के लिए लक्ष्य सेट करना भी याद रखें: मूर्खतापूर्ण लेकिन – nduplessis
को अनदेखा किया जा सकता है, क्या आप-प्रतिनिधि डबल विधि: एक प्रतिनिधि विधि के रूप में कार्यान्वित करना चाहिए, या आपको तालिका में आईबीओटलेट iVar बनाना चाहिए, और कॉल -सेट डबल्यूक्शन पर: इवर? –