首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现多行NSTokenField?

如何实现多行NSTokenField?
EN

Stack Overflow用户
提问于 2017-01-03 23:09:40
回答 1查看 386关注 0票数 0

我想实现一个跨多行的NSTokenField。例如:

多行NSTokenField

我在互联网上找到了一个多行NSTokenField的示例代码:

代码语言:javascript
复制
IBOutlet NSTokenField *tokenField;

- (void)awakeFromNib
{
    [[tokenField cell] setWraps:YES];
}

使我的类委托为NSTokenField,并实现以下方法

代码语言:javascript
复制
- (void)controlTextDidChange:(NSNotification *)obj {    
    NSRect oldTokenFieldFrame = [tokenField frame];
    NSRect tokenFieldBounds = [tokenField bounds];

    float height = oldTokenFieldFrame.size.height;
    tokenFieldBounds.size.height = CGFLOAT_MAX;
    NSSize cellSize = [[tokenField cell] cellSizeForBounds:tokenFieldBounds];

    float y = oldTokenFieldFrame.origin.y + height - cellSize.height;

    [tokenField setFrame:NSMakeRect(oldTokenFieldFrame.origin.x,
                                          y,
                                          oldTokenFieldFrame.size.width,
                                          cellSize.height)];
}

但是这段代码不能正常工作。

你能帮我解决这个问题吗?

提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2022-02-24 10:53:51

对于每一个正在寻找工作代码的答案的人,我已经找到了这个超短的解决方案。我们开始:

代码语言:javascript
复制
#import "MyExpandingTokenField.h"

@implementation MyExpandingTokenField

- (NSSize)intrinsicContentSize {
    NSSize intrinsicContentSize = [self sizeThatFits:NSMakeSize(self.frame.size.width, CGFLOAT_MAX)];
    intrinsicContentSize = NSMakeSize(intrinsicContentSize.width, intrinsicContentSize.height + 5);
    return intrinsicContentSize;
}

- (void)textDidChange:(NSNotification *)notification {
    [super textDidChange:notification];
    [self invalidateIntrinsicContentSize];
}

@end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41453766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档