0
A
回答
0
我不得不做一些不屬於公共API的類的子類。我瞭解瞭如何通過BWToolkit中的BWTokenField代碼進行操作。它可以工作,但我本來想在沒有公共API的情況下做到這一點,因爲我可能希望有一天能夠進入Mac App Store。我提交了一個要求公開API的錯誤報告,並且他們將該報告標記爲重複。我不樂觀,他們會做任何事情。
0
答案是類似這樣的:How do I set the column margins in an NSTableView?
你需要繼承NSTextFieldCell並覆蓋-titleRectForBounds:通過矩形超級回報的寬度插頁副本。
1
使用Objective-C運行時,似乎有一種方法可以在不劃分私有類的情況下完成此操作。不過,這可能無法滿足App Store的需求。
要使用Objective-C運行時,添加
#import <objc/runtime.h>
到你想的修改標記文件的頂部。在這個文件中(也許就NSTokenField
或NSTokenFieldCell
類別)類或類別的@implementation
,加
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);
}
}
這裏發生的事情是,我們正在減少令牌的原有寬度(cellSizeForBounds_override()
)和按比例增加單元格「標題」的寬度(在titleRectForBounds_override()
中)。結果是水平邊距減少的令牌在NSTokenField
中仍可正常工作。你可以通過減少寬度來獲得你想要的效果。
你可以在Mike Ash的文章「Method Replacement for Fun and Profit」;我正在使用「直接覆蓋」方法調整。
相關問題
- 1. NSTokenField令牌消失非選擇NSTokenField
- 2. jQuery - 減少滾動邊距
- 3. NSTokenField選擇的令牌
- 4. 從NSTokenField獲取令牌
- 5. NSTokenField和刪除令牌
- 6. 控制令牌減少
- 7. 減少matplotlib圖中的左右邊距
- 8. 減少Visual Studio 2015中的左邊距
- 9. 從CustomDialog中減少標題的邊距
- 10. 減少Bootstrap模板的頁邊距
- 11. ASP .NET MVC 5 - 減少左手邊距
- 12. NSTokenField設置令牌的最大數量
- 13. 如何減少WP7中WrapPanel內的按鈕邊距?
- 14. 減少距離
- 15. NSTokenField不檢查模糊令牌
- 16. Graphviz:減少傾斜的多邊形節點上的邊距
- 17. 減少間距GridView
- 18. 隨着窗口尺寸減小,邊距減少
- 19. 減少邊界
- 20. 減少邊境
- 21. 在不更改內容邊距的情況下減少Box-Shadow保證金
- 22. 當按鈕集中時減少按鈕的邊距
- 23. 我們怎樣才能減少兩條邊之間的距離?
- 24. 如何減少Holo DatePicker&TimePicker的填充/邊距?
- 25. 減少導航抽屜菜單項的左邊距?
- 26. 減少表格視圖的單元格填充或邊距
- 27. 如何減少/刪除分組UITableView中的左/右手邊距?
- 28. 如何在achartengine中減少餅圖的邊距大小?
- 29. 乳膠:減少報價和詩句中的垂直邊距
- 30. 如何通過Bootstrap減少面板的底部邊距?
我正在談論令牌本身(藍色的)。不是文本字段。但似乎沒有人可以使用這些令牌進行子類化... – Enchilada 2010-11-05 19:08:10
嗯......你說得對。我搜索了一下開源軟件,但沒有一個太明顯。也許你可能會混淆屬性字符串設置,並使用各種段落和間距設置。哈克,也許毫無意義,但也許...... :-) – 2010-11-05 19:24:29