2015-04-03 11 views
8

के लिए प्लेसहोल्डर स्ट्रिंग सेट करें NSTextView के लिए प्लेसहोल्डर स्ट्रिंग को सेट करने का कोई तरीका है जैसे कि NSTextField में? मैंने संपत्ति की जांच की है लेकिन इसे नहीं मिला। मैंने कुछ प्रश्न खोजे हैं लेकिन उचित स्पष्टीकरण नहीं है।NSTextView

उत्तर

10

मुझे यह जवाब ऑनलाइन मिला। Philippe Mougin ने इसे बनाया।

static NSAttributedString *placeHolderString; 

@implementation TextViewWithPlaceHolder 

+(void)initialize 
{ 
    static BOOL initialized = NO; 
    if (!initialized) 
{ 
    NSColor *txtColor = [NSColor grayColor]; 
    NSDictionary *txtDict = [NSDictionary dictionaryWithObjectsAndKeys:txtColor, NSForegroundColorAttributeName, nil]; 
    placeHolderString = [[NSAttributedString alloc] initWithString:@"This is my placeholder text" attributes:txtDict]; 
} 
} 

- (BOOL)becomeFirstResponder 
{ 
    [self setNeedsDisplay:YES]; 
    return [super becomeFirstResponder]; 
} 

- (void)drawRect:(NSRect)rect 
{ 
    [super drawRect:rect]; 
if ([[self string] isEqualToString:@""] && self != [[self window] firstResponder]) 
[placeHolderString drawAtPoint:NSMakePoint(0,0)]; 
} 

- (BOOL)resignFirstResponder 
{ 
    [self setNeedsDisplay:YES]; 
    return [super resignFirstResponder]; 
} 

@end 
6

स्विफ्ट 2,0

var placeHolderTitleString: NSAttributedString = NSAttributedString(string: "Place Holder Value", attributes: [NSForegroundColorAttributeName : NSColor.grayColor()]) 

override func becomeFirstResponder() -> Bool { 
    self.needsDisplay = true 
    return super.becomeFirstResponder() 
} 

override func drawRect(rect: NSRect) { 
    super.drawRect(rect) 

    if (self.string! == "") { 
     placeHolderString.drawAtPoint(NSMakePoint(0, 0)) 
    } 
} 
+0

यह बहुत उपयोगी है, लेकिन प्लेसहोल्डर टेक्स्ट को कई लाइनों पर कैसे लपेटने के बारे में कोई विचार है? –

7

स्विफ्ट 4

यह पता चला है, वहाँ पहले से ही NSTextView में एक placeholderAttributedString संपत्ति है कि सार्वजनिक रूप से उजागर नहीं कर रहा है हो रहा है। इस प्रकार, आप इसे अपने उप-वर्ग में बस कार्यान्वित कर सकते हैं और डिफ़ॉल्ट प्लेसहोल्डर व्यवहार प्राप्त कर सकते हैं (NSTextField के समान)।

class PlaceholderTextView: NSTextView { 
    @objc var placeholderAttributedString: NSAttributedString? 
} 

और यदि यह संपत्ति भविष्य में उपलब्ध कराई जाएगी, तो आपको केवल इस सबक्लास के बजाय NSTextView का उपयोग करने की आवश्यकता है।

+2

मैंने ऐप्पल से इस संपत्ति का पर्दाफाश करने के लिए एक रडार दायर किया है http://www.openradar.me/33583675 –

+0

यह काम नहीं प्रतीत होता है। मैंने संपत्ति को सबक्लास में कार्यान्वित किया लेकिन यह प्रदर्शित नहीं होता है। – Austin

+0

@JanApotheker हां, यह अनिश्चित है कि यह स्विफ्ट 4 में है या 10.13 में है। यह –

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