2009-03-21 19 views
5

Tôi đang cố gắng để có được "thông báo ký tự còn lại" để hiển thị trong NSTextField tròn của tôi và tôi đã nhận nó với hai NSTextFields với sự trợ giúp của Interface Builder và nó đã trông giống như:NSTextField với "padding" ở bên phải

alt text http://jeenaparadies.net/t/s/Twittia-NSTextField1.png

Nhưng khi tôi viết một chút nữa có vẻ như rằng:

alt text http://jeenaparadies.net/t/s/Twittia-NSTextField2.png

điều duy nhất tôi có thể nghĩ là để phân lớp NSTextField và làm điều gì đó với nó để nó d oes không vẽ văn bản theo số nhưng tôi không có ý tưởng làm thế nào để bắt đầu và cần thực sự một số trợ giúp với nó.

Trả lời

11

Cách đơn giản nhất có thể là phân lớp NSTextFieldCell và ghi đè -drawInteriorWithFrame:inView:-selectWithFrame:inView:editor:delegate:start:length:.

Bạn sẽ cần phải quyết định số lượng không gian để phân bổ cho số lượng của bạn và vẽ trong không gian viết tắt. Một cái gì đó giống như mã ví dụ này nên làm việc mặc dù điều này đã không được thử nghiệm trong một trường văn bản được làm tròn.

Bạn có thể tìm thêm thông tin về phân lớp NSCell trong Apple PhotoSearch example code.

- (void)drawInteriorWithFrame:(NSRect)bounds inView:(NSView *)controlView { 
    NSRect titleRect = [self titleRectForBounds:bounds]; 
    NSRect countRect = [self countAreaRectForBounds:bounds]; 

    titleRect = NSInsetRect(titleRect, 2, 0); 

    NSAttributedString *title = [self attributedStringValue]; 
    NSAttributedString *count = [self countAttributedString]; 

    if (title) 
     [title drawInRect:titleRect]; 

    [count drawInRect:countRect]; 
} 

- (void)selectWithFrame:(NSRect)aRect inView:(NSView *)controlView editor:(NSText *)textObj delegate:(id)anObject start:(NSInteger)selStart length:(NSInteger)selLength { 
    NSRect selectFrame = aRect; 
    NSRect countRect = [self countAreaRectForBounds:aRect]; 

    selectFrame.size.width -= countRect.size.width + PADDING_AROUND_COUNT; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(__textChanged:) name:NSTextDidChangeNotification object:textObj]; 
    [super selectWithFrame:selectFrame inView:controlView editor:textObj delegate:anObject start:selStart length:selLength]; 
} 

- (void)endEditing:(NSText *)editor { 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:NSTextDidChangeNotification object:editor]; 

    [super endEditing:editor]; 
} 

- (void)__textChanged:(NSNotification *)notif { 
    [[self controlView] setNeedsDisplay:YES]; 
} 
+0

Cảm ơn sự giúp đỡ, tôi sẽ thử điều đó. – Jeena

+1

liên kết có vẻ bị hỏng – rraallvv

+1

Liên kết hiện là: https://developer.apple.com/library/prerelease/content/samplecode/PhotoSearch/Introduction/Intro.html – Christophe

Các vấn đề liên quan