objective-c – 如何检查NSTextfield是否已截断文本(…结尾处)

objective-c – 如何检查NSTextfield是否已截断文本(…结尾处),第1张

概述我已经四处寻找如何执行此 *** 作,但我找不到任何答案. 我想知道我的NSTextfield是否已经截断文本(…在最后),而不必检查其stringValue的长度.我需要这样做才能知道我是否应该在我的NSTextfield上设置工具提示(就像一个简单的标签). 我不想检查我的textfield的stringValue的长度的原因是因为有些角色比其他角色占用更多的空间,所以这不是很准确 谢谢! 您最好的 我已经四处寻找如何执行此 *** 作,但我找不到任何答案.
我想知道我的NSTextfIEld是否已经截断了文本(…在最后),而不必检查其stringValue的长度.我需要这样做才能知道我是否应该在我的NSTextfIEld上设置工具提示(就像一个简单的标签).
我不想检查我的textfIEld的stringValue的长度的原因是因为有些角色比其他角色占用更多的空间,所以这不是很准确
谢谢!解决方法 您最好的选择可能是使用NSTextVIEw而不是NSTextFIEld.如果使用NSTextVIEw,则可以使用textContainer属性获取NSTextVIEw的NSTextContainer.容器可以告诉你containerSize(绘制文本的空间).

Nsstring对象响应方法sizeWithAttributes:.如果使用给定属性绘制,则可以使用生成的NSSize结构来获取文本的宽度.请参阅NSAttributedString Application Kit Additions Reference的“常量”部分,以确定哪些属性相关.

如果containerSize宽度小于sizeWithAttributes:wIDth,则文本将被截断.

编辑:抱歉,只有没有lineFragmentpadding才会这样,但默认的lineFragmentpadding是非零的.从containerSize.wIDth中减去textContainer.lineFragmentpadding或使用NSTextContainer setlineFragmentpadding:方法将其设置为0.

我想你也可以对文本区域相对于NSTextFIEld的大小做一些假设,并使用sizeWithAttributes:Nsstring方法结合它,但这不是那么干净.

编辑2:我意识到我没有解决OP对使用省略号截断文本的兴趣.下面的示例代码在NSTextVIEw中使用截断.我还认为我可能会抛出一些代码,使NSTextVIEw在外观上与NSTextFIEld在NSBox中更加相似.添加大小检查以确定是否应显示工具提示将使用上面提到的信息对下面的代码进行简单的添加.

Nsstring* string = @"Hello World.";// get the size the text will take up using the default FontNSSize textBounds = [string sizeWithAttributes:@{}];// Create a border vIEw that looks more or less like the border used around// text fIEldsNSBox* borderVIEw = [[NSBox alloc] initWithFrame:NSMakeRect(10,10,60,textBounds.height+4)];[borderVIEw setBoxType:NSBoxCustom];[borderVIEw setborderType:NSBezelborder];[borderVIEw setContentVIEwmargins:NSMakeSize(0,0)];[borderVIEw setFillcolor:[NScolor whitecolor]];// Create the text vIEwNSTextVIEw* textVIEw = [[NSTextVIEw alloc] initWithFrame:NSMakeRect(0,textBounds.height)];[textVIEw setTextContainerInset:NSMakeSize(2,0)];[textVIEw.textContainer setlineFragmentpadding:0];[textVIEw setEditable:YES];// Set the default paragraph style so the text is truncated rather than// wrappedNSMutableParagraphStyle* parStyle = [[NSMutableParagraphStyle alloc] init];[parStyle setlineBreakMode:NSlineBreakByTruncatingTail];// Do not let text get squashed to fit[parStyle setTighteningFactorForTruncation:0.0];[textVIEw setDefaultParagraphStyle:parStyle];[parStyle release];// Set text[textVIEw setString:string];// add NSTextVIEw to border vIEw[borderVIEw addSubvIEw:textVIEw];[textVIEw release];// add NSBox to vIEw you want text vIEw displayed in[self addSubvIEw:borderVIEw];[borderVIEw release];
总结

以上是内存溢出为你收集整理的objective-c – 如何检查NSTextfield是否已截断文本(…结尾处)全部内容,希望文章能够帮你解决objective-c – 如何检查NSTextfield是否已截断文本(…结尾处)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1021588.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存