我使用NSTokenField作为用户输入标签的方式。一切正常,当用户添加或删除标签时,它会与CoreData管理标签。
我最近添加了逻辑,以便NSTokenField会在用户添加标签时垂直调整大小,并使用Andrew Bowman的IFVerticallyExpandingTextField突破到下一行。这一切都很好。
问题在于,当我必须首先用标签填充NSTokenField时,我需要它来调整大小。我通过调用:
来填充该字段[tagField setObjectValue: anArray];
其中anArray是一系列表示标记或标记的对象。这反过来调用NSTokenField委托方法
tokenField:displayStringForRepresentedObject:
返回前一个数组中传递的对象的字符串表示形式。
我需要在对displayStringForRepresentedObject的所有调用之后调整NSTokenField的大小。有没有人有任何通知的想法或发现它已全部完成的方法?甚至在每次调用displayStringForRepresentedObject之间调用resize的方法都可能有效。
提前致谢。
答案 0 :(得分:0)
您可以尝试类似于-setNeedsDisplay:和-displayIfNeeded ...,即-setNeedsSizeToFit:和-sizeToFitIfNeeded。
您只需要一个“needsSizeToFit”BOOL标志和-setNeedsSizeToFit:和-sizeToFitIfNeeded方法。
设置令牌后,请调用-setNeedsSizeToFit:YES。它反过来将设置实例的needsSizeToFit标志,然后如果标志为YES,它将调用[self performSelector:@selector(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;
}