- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我觉得 NSTokenField 中的标记有太多的内边距,即我相信两个半圆(在每一侧)应该更接近文本。默认设置浪费了太多空间。
如何减少这些边距,并使 token 更加紧凑?
最佳答案
使用 Objective-C 运行时,似乎有一种方法可以完成此任务,而无需子类化私有(private)类。不过,这可能无法绕过 App Store 的要求。
要使用 Objective-C 运行时,请添加
#import <objc/runtime.h>
到要修改标记的文件顶部。在此文件中的类或类别的 @implementation
中(可能是 NSTokenField
或 NSTokenFieldCell
上的类别),添加
static NSSize (*kOriginalCellSizeForBounds)(id, SEL, NSRect);
NSSize cellSizeForBounds_override(id self, SEL _cmd, NSRect rect)
{
NSSize size = kOriginalCellSizeForBounds(self, _cmd, rect);
size.width -= 10;
return size;
}
static NSRect (*kOriginalTitleRectForBounds)(id, SEL, NSRect);
NSRect titleRectForBounds_override(id self, SEL _cmd, NSRect rect)
{
NSRect titleRect = kOriginalTitleRectForBounds(self, _cmd, rect);
titleRect = NSInsetRect(rect, -5, 0);
return titleRect;
}
+ (void)load
{
Class tokenAttachmentCellClass = objc_getClass("NSTokenAttachmentCell");
SEL selector = @selector(cellSizeForBounds:);
Method originalMethod = class_getInstanceMethod(tokenAttachmentCellClass, selector);
kOriginalCellSizeForBounds = (void *)method_getImplementation(originalMethod);
if(!class_addMethod(tokenAttachmentCellClass, selector, (IMP)cellSizeForBounds_override, method_getTypeEncoding(originalMethod))) {
method_setImplementation(originalMethod, (IMP)cellSizeForBounds_override);
}
selector = @selector(titleRectForBounds:);
originalMethod = class_getInstanceMethod(tokenAttachmentCellClass, selector);
kOriginalTitleRectForBounds = (void *)method_getImplementation(originalMethod);
if(!class_addMethod(tokenAttachmentCellClass, selector, (IMP)titleRectForBounds_override, method_getTypeEncoding(originalMethod))) {
method_setImplementation(originalMethod, (IMP)titleRectForBounds_override);
}
}
这里发生的是,我们减少了 token 的原始宽度(在 cellSizeForBounds_override()
中),并按比例增加了单元格“标题”的宽度(在 titleRectForBounds_override() 中)
)。结果是水平边距减少的 token 在 NSTokenField
中仍然可以正常工作。您可以调整宽度的减少量以获得您想要的效果。
您可以在 Mike Ash 的文章 “Method Replacement for Fun and Profit” 中阅读有关方法混合的更多信息。 ;我正在使用“直接覆盖”方法调配。
关于objective-c - 减少 NSTokenField 标记的内部边距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4102976/
奇怪的 UI 错误,正是此链接中报告的内容: http://www.mail-archive.com/[email protected]/msg53307.html 如果我将鼠标移动到未选择/当前编辑
在 NSTokenField 中输入时,我会使用 NSTokenFieldDelegate 中的 GetCompletionStrings 显示对此值的建议 public override strin
我已经实现了一个 NSTokenField,它使用一些自定义数据对象来显示动态数据。委托(delegate)设置良好并显示 token 的正确值。 我还在 token 上实现了一个菜单,允许选择用于显
我的应用程序允许用户将标签附加到某些模型对象(NSManagedObject 的子类)。 Tag 类也是 NSManagedObject 的子类。我决定使用 NSTokenField 来显示标签,其中
我正在尝试自定义 NSTokenField ,尝试几个小时后我意识到 NSTokenField 的可定制性不够(至少使用公共(public)方法)。您知道可以轻松自定义的 NSTokenField 替
我觉得这一定是一个常见问题,我只是在努力弄清楚,但我找不到其他人问这个问题,所以......基本上,我有一个 NSTokenField,当用户开始输入时,我会发出 SOAP 请求并获取与他们输入的内容
我使用 NSTokenField,但在指定的延迟后它没有显示小狗以及建议 我尝试过这样的: class ViewController: NSViewController { @IBOutlet wea
我从 tokenField:completionsForSubstring:indexOfToken:indexOfSelectedItem 获得的返回破坏了我输入的项目。这解释了为什么:阅读本文NS
我正在创建一个使用 NSTokenField 的应用程序。我需要自动完成。我正在使用 NSURLRequest 从 http://stackoverflow.com/filter/tags?_=&li
我有一个带有多行的 NSTokenField 对象(只需在界面生成器中垂直调整控件大小)。不幸的是,当按下返回键时,NSTokenField 对象不会插入新行。有什么想法如何让控件在按回车键时插入新行
我在我的 xib 中创建了一个 NSTokenField。我想在 tokenField 中显示不同颜色的 token 。含义:一些标记将是蓝色的,其余的将是红色的(根据其内容)。这可能吗? 以下代码对
我正在尝试对 NSTokenField 进行子类化,并且我需要在初始化期间设置一些 ivars,但我无法工作必须覆盖哪个初始化程序。该文档没有提及任何关于 token 字段继承的 NSTokenFie
当要显示的项目太多时,是否可以在 NSTokenField 上获取滚动条? 我尝试将其嵌入到 ScrollView 中,但不起作用。 谢谢 最佳答案 您可以通过将 ScrollView 插入 toke
我想要一个NSTokenField包含纯文本和标记。这与 this question 中的问题相同。 ,但那里的答案并没有为我解决这个问题。也许我遗漏了一些东西,或者苹果在这些答案发布后的 5 年内改
我有一个 NSTokenField 来向对象(文档)添加标签。我想在将 token 添加到 token 字段时(键入 token 化字符时)使用新标签更新对象。不幸的是这似乎不起作用。NSTokenF
有什么方法可以阻止 NSTokenField 在按 ENTER 键或使用 TAB 键向第一响应者发送信息时选择所有内容? 最佳答案 NSTokenField 是 NSTextField 的子类。没有简
我将一个NSTokenField插入到NSView中,当输入有足够的 token 时,它会变成多行模式,但有一个问题。第一行顶部被切掉 2px,两行之间的行距变得太小。 有办法避免这种情况吗? 最佳答
我试图将 stringValue 设置为 NSTokenField(NSTextField 的子类),但我发现如果字符串以空格开头,它会删除它。我想保留空间。我也尝试过应用格式化程序,但没有成功。即:
我想实现一个NSTokenField,它将显示 token ——当鼠标悬停在 token 上时——显示一个删除图标。随后,当我单击该图标时,我希望删除 token 。 经过大量搜索,标准的 NSTok
我的应用程序中有一个 NSTokenField 并且我实现了 tokenField:completionsForSubstring:indexOfToken:indexOfSelectedItem:
我是一名优秀的程序员,十分优秀!