我试图让“剩余的字符通知”显示在我的圆形NSTextField中,并且在Interface Builder的帮助下我用两个NSTextField获得它,它看起来就像那样:
alt text http://jeenaparadies.net/t/s/Twittia-NSTextField1.png
但是当我写得更多时,看起来就是这样:
alt text http://jeenaparadies.net/t/s/Twittia-NSTextField2.png
我唯一能想到的是NSTextField的子类并用它做一些事情,所以它不会在数字下面绘制文本,但我不知道如何开始并需要真正的帮助。
答案 0 :(得分:11)
最简单的方法可能是继承NSTextFieldCell
并覆盖-drawInteriorWithFrame:inView:
和-selectWithFrame:inView:editor:delegate:start:length:
。
您需要决定为计数分配多少空间并在缩写空间中绘制。像这个示例代码的东西应该可以工作,尽管尚未在圆角文本字段中进行测试。
您可以在Apple的PhotoSearch example code中找到有关子类化NSCell
的更多信息。
- (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];
}