मेरे पास एक एनएसटीक्स्ट व्यू है कि मैं एनएसटीस्क से टेक्स्ट आउटपुट कर रहा हूं। स्क्रॉलिंग और चयन व्यवहार को छोड़कर सब कुछ अपेक्षित रूप से काम करता है।

1: यदि मैं ऊपर स्क्रॉल करने का प्रयास करता हूं, तो मेरे जाने के तुरंत बाद मेरे स्क्रॉल की स्थिति नीचे की ओर आ जाती है। कोई विचार? मैंने इसके बारे में काफी कुछ दस्तावेज देखा है और इसके बारे में कुछ भी नहीं मिला है।

2: अगर मैं टेक्स्ट का चयन करता हूं, तो यह उसे हटा देता है। मैं बस इसे चुनना चाहता हूं ताकि मैं कॉपी और पेस्ट कर सकूं। इस पर भी हार गए।

किसी भी सुझाव या संकेत का स्वागत किया जाएगा। धन्यवाद।

- (id)init
{
    [super init];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(readPipe:)
                                                 name:NSFileHandleReadCompletionNotification 
                                               object:nil];

    return self;
}

- (void)kicked
{
    task = [[NSTask alloc] init];

    [task setLaunchPath:[self.kickLocationTextField stringValue]];
    [task setArguments:kickBuild];

    NSPipe *pipe = [[NSPipe alloc] init];
    fileHandle = [pipe fileHandleForReading];
    [fileHandle readInBackgroundAndNotify];

    [task setStandardOutput:pipe];
    [task setStandardError:pipe];

    [task launch];

    [task release];
    [pipe release];
}


- (void)readPipe:(NSNotification *)notification
{
    NSData *data;
    NSString *text;

    if( [notification object] != fileHandle )
    {
        return;
    }

    data = [[notification userInfo] objectForKey:NSFileHandleNotificationDataItem];
    text = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];

    [nsTaskOutput insertText:text];

    [text release];
    if (data != 0)
    {
        [fileHandle readInBackgroundAndNotify];
    }
}
3
crewshin 6 नवम्बर 2011, 03:11
जब भी आप कार्य से आउटपुट प्राप्त करते हैं तो क्या आप पूरे टेक्स्ट को टेक्स्ट व्यू में बदल रहे हैं? कृपया प्रश्न संपादित करें और उस कोड को पोस्ट करें जिसका उपयोग आप कार्य से आउटपुट प्राप्त करने के लिए करते हैं और इसे टेक्स्ट व्यू में जोड़ते हैं।
 – 
user557219
6 नवम्बर 2011, 04:31
अपडेट किया गया। NSTextView के लिए दस्तावेज़ों के मुताबिक... अगर दृश्य में कुछ भी नहीं चुना गया है तो यह अगली आने वाली स्ट्रिंग को जोड़ देगा। यदि वहाँ IS चयनित पाठ है... यह उसे बदल देगा। उन पिछले दो प्रश्नों को छोड़कर, सब कुछ अपेक्षा के अनुरूप काम करता है।
 – 
crewshin
6 नवम्बर 2011, 05:04

1 उत्तर

सबसे बढ़िया उत्तर

insertText: के बजाय इसे आजमाएं:

NSScroller *scroller = nTaskOutput.enclosingScrollView.verticalScroller;
BOOL shouldScrollToBottom = scroller.doubleValue == 1.0;
NSTextStorage *ts = nTaskOutput.textStorage;
[ts replaceCharactersInRange:NSMakeRange(ts.length, 0) withString:text];
if (shouldScrollToBottom) {
    NSRect bounds = nTaskOutput.bounds;
    [nTaskOutput scrollPoint:NSMakePoint(NSMaxX(bounds), NSMaxY(bounds))];
}
3
rob mayoff 4 मई 2017, 22:39
अच्छा! यह बहुत अच्छा काम करता है !! केवल नकारात्मक पक्ष यह है कि यह नए आउटपुट के साथ स्वचालित रूप से नीचे तक स्क्रॉल नहीं करता है।
 – 
crewshin
6 नवम्बर 2011, 22:07
मैंने अपना जवाब संशोधित कर दिया है लेकिन यह सिर्फ एक अनुमान है।
 – 
rob mayoff
6 नवम्बर 2011, 22:36
बिंगो! आपने यहां जो किया, मुझे उसे तोड़ना होगा। मैंने कभी भी NSTextStorage या NSScroller का उपयोग नहीं किया है, इसलिए ऐसा लगता है कि यह दस्तावेज़ों के उन वर्गों में खुदाई करने का समय है। बहुत बहुत धन्यवाद रोब।
 – 
crewshin
7 नवम्बर 2011, 00:02
ऐसा लगता है कि आपका स्क्रॉल-टू-बॉटम कार्यान्वयन "अगर (स्क्रॉल नीचे है) के बराबर है तो नीचे स्क्रॉल करें" सही है?
 – 
GTAE86
28 जून 2012, 21:27
यह अधिक पसंद है "यदि इसे डालने से पहले नीचे स्क्रॉल किया गया था, तो डालने के बाद नीचे स्क्रॉल करें।"
 – 
rob mayoff
25 जिंदा 2014, 07:46