我使用NSTokenField作为用户输入标签的一种方式。一切都很好,当用户添加或删除标签时,它都与管理标签的CoreData挂钩。
我最近添加了逻辑,以便当用户使用Andrew Bowman的IFVerticallyExpandingTextField添加标签并换行到下一行时,NSTokenField可以垂直调整大小。同样,这一切都运行得很好。
问题是,当我最初必须用标签填充NSTokenField时,我需要调整它的大小。我通过调用以下命令来填充该字段:
[tagField setObjectValue: anArray];其中anArray是表示标签或令牌的一系列对象。这又会调用NSTokenField委托方法
tokenField:displayStringForRepresentedObject:它返回前一个数组中传递的对象的字符串表示形式。
在所有对displayStringForRepresentedObject的调用之后,我需要调整NSTokenField的大小。有没有人有任何通知的想法,或者有办法发现这一切都已经完成了?即使是在每次调用displayStringForRepresentedObject之间调用resize的方法也可能会起作用。
提前谢谢。
发布于 2010-09-17 22:27:53
您可以尝试类似于-setNeedsDisplay:和-displayIfNeeded的代码...即-setNeedsSizeToFit:和-sizeToFitIfNeeded。
您只需要一个"needsSizeToFit“BOOL标志和-setNeedsSizeToFit:和-sizeToFitIfNeeded方法。
设置令牌后,调用-setNeedsSizeToFit:YES。它将依次设置实例的选择器标志,如果标志为YES,它将调用self performSelector:@ needsSizeToFit (SizeToFitIfNeeded) withObject:nil afterDelay:0。您的-sizeToFitIfNeeded方法将检查needsSizeToFit标志是否为YES,调用self sizeToFit,然后将needsSizeToFit标志设置为NO。
更新
下面是执行上述基本自动调整大小的a complete class (JLNAutoSizingTokenField)。唯一的增强是在前面提到的委托方法中调用它:
- (NSString *)tokenField:(NSTokenField *)aTokenField
displayStringForRepresentedObject:(id)representedObject
{
[(JLNAutoSizingTokenField *)aTokenField setNeedsSizeToFit:YES];
return representedObject;
}https://stackoverflow.com/questions/3735782
复制相似问题