2011-01-19 4 views
9

NSNutlineView के लिए आपको दृश्य पंक्तियों का अनुक्रम कैसे प्राप्त हो सकता है? मुझे यह जानने की जरूरत है कि कौन सा स्तर और कौन सी पंक्तियां दिखाई दे रही हैं। (NSArray *) indexPathsForVisibleRowsNSNutlineView के लिए दृश्यमान पंक्तियों के अनुक्रमणिका कैसे प्राप्त कर सकते हैं?

उत्तर

0

मैंने अपना डेटासोर्स बदल दिया है ताकि आउटलाइन के लिए एनएसआईएंडएक्सपैथ वापस कर सकें: बच्चे: ITem:। इस तरह से मैं NSIndexPath प्राप्त करने के लिए [रूपरेखा पंक्ति एटपॉइंट: पॉइंट] (और इसी तरह) का उपयोग कर सकता हूं।

इस परिवर्तन के लिए मुझे इन इंडेक्सपैथ का एक सेट बनाने की आवश्यकता है ताकि जब तक मुझे उनकी आवश्यकता न हो, तब तक उन्हें रिहा नहीं किया जाएगा। साथ ही, अन्य सभी कोड जिन्हें आम तौर पर मॉडल ऑब्जेक्ट की अपेक्षा की जाती है, अब मॉडल ऑब्जेक्ट से मॉडल ऑब्जेक्ट को देखने की आवश्यकता है। मेरे मामले में यह कुशल था।

NSScrollView* scrollView = [self.tableView enclosingScrollView]; 

CGRect visibleRect = scrollView.contentView.visibleRect; 

NSRange range = [self.tableView rowsInRect:visibleRect]; 
रेंज में

आप पहली बार दिखाई सेल के रूप में स्थान मिल जाएगा और लंबाई में कोशिकाओं की मात्रा दिखाए जाते हैं ताकि आप दिखाई कोशिकाओं के सूचकांक पता कर सकते हैं:

+0

फिर भी इच्छा है कि एक indexPathsForVisibleRows समकक्ष था। – Cal

13

NSOutlineView एक NSTableView उपवर्ग है -

[संपादित करें] क्या मैं वास्तव में के लिए देख रहा हूँ CocoaTouch/UITableView के लिए एक NSOutlineView बराबर है। इसलिए -rowsInRect:-visibleRect (NSView से) के साथ जोड़ा जा सकता है। स्तर निर्धारित करने के लिए -levelForRow: का उपयोग करें।

+0

लगता है जैसे आप मॉडल पुनरावृत्ति करने के लिए संख्या पंक्ति ऊपर भरोसा करना होगा। मैं वास्तव में रैखिक समय नहीं चाहता .... जब तक मुझे कुछ याद नहीं आ रहा है? – Cal

+0

मुझे यकीन नहीं है कि आपका क्या मतलब है। आप आइटम द्वारा अपनी वास्तविक वस्तुओं में पंक्तियों का अनुवाद कर सकते हैं ForRow :, आदि –

+0

क्षमा करें ... मेरा प्रश्न पर्याप्त विस्तृत नहीं था। मैं वास्तव में दृश्य पंक्तियों के लिए पेड़ निर्देशांक प्राप्त करने में सक्षम होना चाहता हूं। उदाहरण के लिए मेरे मामले में पेड़ के दो स्तर हैं इसलिए इसमें पत्ती नोड्स के लिए दो इंडेक्स होंगे। – Cal

22

आप निम्न कर सकते ।

+1

महान जवाब! और उसके बाद [self.tableView itemAtRow: range.location] – stevesliva

+0

यह सुनिश्चित नहीं है कि स्क्रॉल व्यू की अनावश्यक भागीदारी के अलावा, साढ़े सालों पहले मैंने जवाब से अलग कैसे किया है (आप एक दृश्य पूछ सकते हैं सीधे इसके '-visibleRect') के लिए और तथ्य यह है कि ओपी एक रूपरेखा दृश्य (पेड़) बनाम एक टेबल (सूची) के बारे में पूछ रहा है ... –

+2

@JoshuaNozzi कोड पढ़ने के लिए आसान है –

0

स्विफ्ट में 3:

let rows = IndexSet(integersIn: 0..<outlineView.numberOfRows) 
let rowViews = rows.flatMap { outlineView.rowView(atRow: $0, makeIfNecessary: false) as? TimelineRowView } 

for rowView in rowViews 
    //iterate over rows 
} 
संबंधित मुद्दे

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