2015-05-27 9 views
16

पर कॉल करने के लिए कैसे करें मेरे पास टेक्स्ट मैसेज व्यू-आधारित एनएसटीबल व्यू के साथ सरल चैट एप्लिकेशन है जैसा कि आप नीचे दी गई तस्वीर पर देख सकते हैं। enter image description here प्रत्येक संदेश में सभी टेक्स्ट फिट करने के लिए ऊंचाई वाले NSTextView उदाहरण होते हैं।NSScrollView autoscroll-method प्रोग्रामेटिक रूप से

मुझे बस इतना आवश्यक है कि NSScrollView (जो एनएसटीबल व्यू-इंस्टेंस संलग्न है) ऑटोस्कोलिंग शुरू करें, जबकि उपयोगकर्ता टेक्स्ट खींचने वाले माउस को काफी दूर कर रहा है। दुर्भाग्यवश, ऑटोस्कोलिंग प्रकट नहीं होती है। टेक्स्ट दृश्यों के बाहर कहीं खींचने के मामले में सभी सफल होते हैं।

मैं फोन करने के लिए autoscroll: -method सीधे बस से NSTextView -subclass से NSEvent -instance धक्का करने की कोशिश की (this article से उदाहरण की तरह) "माउस घसीटा" -event:

- (void)mouseDragged:(NSEvent *)event 
{ 
    [self.scrollView autoscroll:event]; 
} 

मैं सभी overrode किया है माउस घटनाओं और सभी पाठ चयन लागू किया, यह विधि अक्सर invokes। लेकिन autoscrolling काम नहीं लग रहा है।

अद्यतन

मैं पता लगा कि -autoscroll: कॉल करने से पहले -method एक ही वस्तु के -mouseDown: होना चाहिए। लेकिन यह मेरे पाठ का चयन तंत्र को तोड़ देता है। बिंदु भी पहले उत्तरदाता होने में नहीं, mouseDown: -method लेकिन कुछ भी नहीं होना चाहिए।

+0

यदि आप कह रहे हैं कि NSScrollView के अंदर एक NSTableView के साथ और NSTableView पंक्तियां बहु-पंक्ति हैं, और जब सेल के अंदर पाठ का चयन करते हैं और स्क्रॉल व्यू के नीचे नीचे खींचते हैं, तो यह स्क्रॉल नहीं करता है? यदि ऐसा है, तो वह कार्यक्षमता स्वचालित रूप से NSScrollView द्वारा प्रदान की जाती है और चयन करते समय होने वाली स्क्रॉलिंग के लिए और कुछ भी आवश्यक नहीं है। परीक्षण करने के लिए, मैंने एक नई परियोजना बनाई, एक NSScrollView (NSTableView) जोड़ा, स्क्रॉल व्यू से पंक्ति पंक्ति ऊंचाई सेट करें और तालिकादृश्य पॉप्युलेट किया। पाठ पर क्लिक करना और फिर स्क्रॉलव्यू के नीचे पिछले चयन करना। यह स्वचालित रूप से स्क्रॉल किया गया। – Jay

+0

@Jay मुझे एनएसटीबल व्यू स्क्रॉल व्यू ऑटोस्कोलिंग शुरू करने की आवश्यकता है, टेक्स्ट व्यू का एक नहीं (टेक्स्ट व्यू में टेक्स्ट फिट करने के लिए पर्याप्त ऊंचाई है)। – Astoria

+0

मुझे यकीन नहीं है कि आप क्या पूछ रहे हैं। यह मानते हुए कि आप ऑब्जेक्ट लाइब्रेरी से Xcode में विंडो पर एनएसटीबल व्यू को दवा देते हैं, एनएसटीबल व्यू को एनएसएसक्रॉलव्यू द्वारा संलग्न किया जाएगा।यदि आप उस पंक्ति में माउस पर क्लिक करके तालिका में एक पंक्ति में टेक्स्ट का चयन करने का प्रयास कर रहे हैं जहां पाठ है और खींच रहा है (स्क्रीन स्क्रीन से यह कैसा दिखाई देता है, तो संलग्न एनएसक्रॉल व्यू स्वचालित रूप से संभालता है और स्क्रॉल करेगा आप पाठ का चयन करना जारी रख सकते हैं। – Jay

उत्तर

2

आम तौर पर, एक टेक्स्ट व्यू स्वयं के स्क्रॉल व्यू के भीतर होता है। भले ही स्क्रॉल किए बिना सभी टेक्स्ट दिखाने के लिए पर्याप्त बड़ा हो, फिर भी यह वहां है। उस स्क्रॉल व्यू में संभवतः -autoscroll: का कॉल (संभवतः उस स्क्रॉल व्यू सहित)? केवल उस स्क्रॉल व्यू को स्क्रॉल करने का प्रयास करेगा, न कि स्क्रॉल व्यू जिसमें तालिका दृश्य शामिल है।

पदानुक्रम में उच्चतम दृश्य पर -autoscroll: पर कॉल करने का प्रयास करें। या तो self.scrollView.superview, तालिका सेल दृश्य, या तालिका दृश्य।

नोट, हालांकि, तालिका दृश्य वाला स्क्रॉल व्यू स्क्रॉलिंग को बनाए रखेगा, यहां तक ​​कि टेक्स्ट व्यू वाला सेल व्यू पूरी तरह से स्क्रीन पर है। असल में, यह अब तक स्क्रॉल कर सकता है कि यह दूसरी दिशा में स्क्रीन से बाहर है। असल में, यह नहीं पता कि आप टेक्स्ट व्यू के भीतर चयन करने का प्रयास कर रहे हैं, इसलिए जब यह चयन टेक्स्ट व्यू के किनारे तक फैलता है तो इसे रोकने के लिए नहीं पता है।

कोई अन्य दृष्टिकोण "नंगे" टेक्स्ट व्यू का उपयोग करने की कोशिश करने के लिए हो सकता है जिसमें कोई संलग्न स्क्रॉल व्यू नहीं है। मुझे नहीं लगता कि आईबी आपको ऐसा करने देगा, इसलिए आपको इसे प्रोग्रामेटिक रूप से करना होगा। हालांकि, छोटे टेक्स्ट दृश्य ऑटो लेआउट के साथ अच्छी तरह से नहीं खेलते हैं।

+0

'-autoscroll:' (टेबल व्यू या उसके संलग्न स्क्रॉल व्यू पर) को कॉल करके '-mouseDragged:' पैरामीटर से लिया गया कोई ईवेंट कुछ भी नहीं होता है। हो सकता है कि मुझे किसी भी तरह 'NSEvent' को म्यूट करना चाहिए। – Astoria

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