2009-03-06 10 views
62

जब कोई उपयोगकर्ता NSTableView में पंक्ति पर डबल क्लिक करता है तो मुझे विंडो खोलने के लिए अपने एप्लिकेशन की आवश्यकता होती है। मुझे इसे पूरा करने के तरीके पर जानकारी या उदाहरण खोजने में थोड़ा मुश्किल समय है। क्या कोई मुझे सही दिशा में निर्देशित कर सकता है?कोको में एक एनएसटीबल व्यू पंक्ति डबल क्लिक करें?

उत्तर

117

एनएसटीबल व्यू पर -setDoubleAction: विधि पर एक नज़र डालें; आप इसे उस विधि पर सेट कर सकते हैं जिसे सामान्य लक्ष्य-क्रिया प्रणाली की तरह ही बुलाया जाएगा लेकिन डबल-क्लिक पर।

उस क्रिया विधि में, -clickedRow उपयोगी होगा।

+7

क्या आईबी के माध्यम से इसे जोड़ने का कोई तरीका है? –

+21

सेटटाइटल के साथ तालिका दृश्य के लिए लक्ष्य सेट करना भी याद रखें: मूर्खतापूर्ण लेकिन – nduplessis

+1

को अनदेखा किया जा सकता है, क्या आप-प्रतिनिधि डबल विधि: एक प्रतिनिधि विधि के रूप में कार्यान्वित करना चाहिए, या आपको तालिका में आईबीओटलेट iVar बनाना चाहिए, और कॉल -सेट डबल्यूक्शन पर: इवर? –

55

कोको को अन्य नवागंतुकों के लाभ के लिए @JimPuls उत्तर में अधिक बुनियादी जानकारी जोड़ना।

  1. एनएसटीबल व्यू के लिए एक आईबीओलेट एक इंटरफ़ेस में घोषित करने की आवश्यकता है। मुझे लगता है कि तालिका के प्रतिनिधि में ऐसा करना पसंद है।
  2. तालिका में आईबीओलेट को इंटरफ़ेस बिल्डर के माध्यम से कनेक्ट करने की आवश्यकता है। ऐसा करने के लिए Ctrl-drag & कक्षा में आईबी में ड्रॉप करें जो तालिका दृश्य में आउटलेट घोषित करता है। जब आप अपना माउस छोड़ते हैं तो पॉपअप को चरण # 1 में घोषित आउटलेट के नाम से दिखाई देना चाहिए। इसे चुनें।
  3. @ अनुमोदन अनुभाग में, -वेकफ्रॉमनिब विधि पर, कॉल -सेट लक्ष्य: और -सेट दोहराव: चरण # 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... 
} 

उम्मीद है कि इससे मदद मिलती है।

0

आप बाइंडिंग के साथ एक ही बात कर सकते हैं, सब से पहले ज फ़ाइल

-(IBAction)openWindow:(id)sender 

मीटर फ़ाइल में में एक mentod घोषित लागू ही

-(IBAction)openWindow:(id)sender 
{ 
    //do something here; 
} 

कि निब को मिला, जहां आपके तालिका दृश्य मौजूद है, तालिका दृश्य का चयन करें और विशेषता निरीक्षक का दूसरा अंतिम टैब प्राप्त करें, डबल सीआईसीएल तर्क प्रकटीकरण त्रिकोण जांच खोलें फॉक्स का चयन फ़ाइल के स्वामी को जांचने के लिए बाध्य करें, मॉडल कुंजी पेट "स्वयं" होना चाहिए, चयनकर्ता का नाम "ओपनविंडो: ", एक ही प्रक्रिया" डबल क्लिक लक्ष्य "प्रकटीकरण के साथ करती है पुनः, यह

10

जैसा कि पीआर सिंह ने कहा था, आप कोको बाइंडिंग का उपयोग कर सकते हैं, आप चयनित ऑब्जेक्ट्स के साथ भी पास कर सकते हैं।

  1. अपने टेबल देखें आईबी में तो बाइंडिंग निरीक्षक में इन दो बाइंडिंग सेट अप के रूप में इस का चयन करें:

    >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

+0

एक आकर्षण की तरह काम किया। – groomsy

6

अगर कोई स्विफ्ट 2.0 संस्करण की तलाश करता है: यह मेरे लिए काम करता है। उद्देश्य सी कोड से कहीं अधिक आसान लगता है।

@IBOutlet weak var searchResultTable: NSTableView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    searchResultTable.doubleAction = "doubleClickOnResultRow" 
} 

func doubleClickOnResultRow() 
{ 
    print("doubleClickOnResultRow \(searchResultTable.clickedRow)") 
} 
+0

यह वास्तव में सहायक है। उन लोगों के लिए 'डबलएक्शन' के बारे में अधिक जानना चाहते हैं, यह [लिंक] देखें (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTableView_Class/index.html#//apple_ref/OCC/instp/NSTableView/doubleAction)। –

+0

स्विफ्ट 3 के लिए, फ़ंक्शन चयनकर्ता 'searchResultTable.doubleAction = #selector (doubleClickOnResultRow) ' –

6

आप इंटरफ़ेस बिल्डर में डबल क्लिक कार्रवाई को तार कर सकते हैं। अपने टेबल व्यू पर नियंत्रण-क्लिक करें (सुनिश्चित करें कि आपको कनेक्शन कनेक्शन प्राप्त करने के लिए तालिका दृश्य, स्क्रॉल व्यू या क्लिप व्यू या टेबल कॉलम नहीं मिल रहा है)। "प्रेषित क्रियाएं" अनुभाग में "डबलएक्शन" आइटम ढूंढें। इसे अपनी पसंद के आईबीएक्शन से कनेक्ट करें।

+0

आसान निचोड़ नींबू peasy होगा। आप तालिका दृश्य के क्लिक की गई विधि विधि से क्लिक की गई पंक्ति प्राप्त कर सकते हैं। आपको अभी भी उत्तर संख्या दो में वर्णित आउटलेट की आवश्यकता है। –

+0

आपको तालिका दृश्य से जुड़े आउटलेट की आवश्यकता नहीं है, क्योंकि तालिका दृश्य स्वयं को क्रिया संदेश के प्रेषक तर्क के रूप में प्रदान करता है। –

+0

इच्छा है कि मैंने इसे अपने स्वयं के इशारा पहचानकर्ता रोलिंग में खोदने से पहले देखा था ... – ghostatron

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^