2012-07-31 19 views
6

"ऊपर" और "नीचे" कुंजी के साथ टेक्स्टव्यू में लाइन से लाइन पर जाने पर, यह स्क्रॉलिंग व्यवहार प्रदर्शित करता है - जब कर्सर बहुत ऊपर होता है और मैंने "अप" (और उपाध्यक्ष) इसके विपरीत), यह दस्तावेज़ आधा पृष्ठ ऊपर स्क्रॉल करता है, यानी, वर्तमान पंक्ति अब टेक्स्टव्यू के बीच में है।NSTextView स्क्रॉलिंग लाइन

क्या यह व्यवहार अक्षम करना संभव है? क्या इसे केवल एक पंक्ति से स्क्रॉल करना संभव है? ताकि वर्तमान रेखा हमेशा शीर्ष (या नीचे) पर रहती है?

उत्तर

1

मुझे पता है कि मैं पार्टी के लिए थोड़ा देर से आ गया हूं, लेकिन चूंकि इसका उचित उत्तर नहीं दिया गया है, इसलिए मैं इसे आज़मा दूंगा। मुझे NSTextViews के साथ एक ही समस्या थी। दृश्य के दृश्यमान भाग में सम्मिलित स्थिति लाने के लिए -scrollRangeToVisible का उपयोग करते समय, स्क्रीन के (लंबवत) मध्य में देखभाल को रखने के लिए स्क्रॉलिंग की यह आदत थी। क्या मैंने किया था का उपयोग किया गया था [NSView scrollRectToVisible] के बजाय, के रूप में यह न्यूनतम दूरी को देखने के दिखाई रेक्ट करने के लिए एक रेक्ट लाने के लिए की जरूरत स्क्रॉल:

NSRange caretRng = NSMakeRange(caretLocation, 0); 
NSLayoutManager* lm = [view layoutManager]; 
NSRange glyphRange = [lm glyphRangeForCharacterRange:caretRng actualCharacterRange:nil]; 
NSRect glyphRect = [lm boundingRectForGlyphRange:glyphRange inTextContainer:[view textContainer]]; 
[view scrollRectToVisible:glyphRect]; 

आशा है कि यह मदद करता है!

+0

धन्यवाद! लेकिन मुझे यह कहां रखना चाहिए मेरे एनएसटीएक्स्टव्यू सबक्लास? मैं समझता हूं कि 'scrollRectToVisible:' जिस तरह से मैं चाहता हूं उसे स्क्रॉल करता है - समस्या यह है कि, NSTextView 'scrollRangeToVisible' कहलाता है: '- इसे पूर्व विधि कैसे कॉल करें? –

+0

क्या आपने अपने NSTextView उपclass में ScrollRangeToVisible को ओवरराइड करने का प्रयास किया है? मेरे सेटअप में मैं कुंजीडाउन संदेशों को ओवरराइड करता हूं और मैन्युअल रूप से कैरेट गति करता हूं, इसलिए scrollRangeToVisible स्वचालित रूप से नहीं कहा जाता है और मैं मैन्युअल रूप से scrollRectToVisible को कॉल कर सकता हूं, लेकिन ऐसा करना चाहिए, हालांकि मुझे संभावित साइड इफेक्ट्स के बारे में पता नहीं है। – Ibazan

+0

यह कम या कम काम करता है! एकमात्र मुद्दा यह है कि कभी-कभी, जब मैं लंबे समय तक दबाए गए तीर को ऊपर/नीचे दबाता हूं, तो कुछ पंक्तियों को स्क्रॉल करने की याद आती है ताकि देखभाल पहली/आखिरी पंक्ति में न हो लेकिन शायद नीचे/नीचे 2-3 पंक्तियां हों। –

1

NSTextView (NSText के माध्यम से) -scrollRangeToVisible: नामक एक विधि है। अपने स्वयं के स्क्रॉलिंग व्यवहार को निर्दिष्ट करने के लिए सीधे NSTextView और ओवरराइडिंग -स्कोलरेंज को देखने के लिए दृश्यमान पर विचार करें।

यदि आपको व्यवहार को सही तरीके से प्राप्त करने में अधिक विशिष्ट सहायता की आवश्यकता है, तो एक अलग प्रश्न पोस्ट करें जो वास्तव में इच्छित व्यवहार और कोड जिसे आप प्राप्त करने का प्रयास करते हैं उसे निर्दिष्ट करते हैं।

+0

उत्तर के लिए धन्यवाद। मैंने पहले से ही इस प्रश्न में वांछित व्यवहार निर्दिष्ट किया है। –