Cocoa NSTableView:使用蒙特卡罗模拟找出列宽?
NSTableView声明此可选委托方法:Cocoa NSTableView:使用蒙特卡罗模拟找出列宽?,cocoa,nstableview,montecarlo,Cocoa,Nstableview,Montecarlo,NSTableView声明此可选委托方法: - (CGFloat)tableView:(NSTableView *)tableView sizeToFitWidthOfColumn:(NSInteger)column; 实现它很容易,但是当您的表中充满了数千个条目时,您就会看到性能问题,调用此方法会使应用程序无响应 以下是有关实现该方法的文档说明: 如果要控制列的宽度,请实现此方法 当用户双击调整分隔符时。默认情况下, NSTableView迭代表中的每一行,通过 preparedCellAt
- (CGFloat)tableView:(NSTableView *)tableView sizeToFitWidthOfColumn:(NSInteger)column;
实现它很容易,但是当您的表中充满了数千个条目时,您就会看到性能问题,调用此方法会使应用程序无响应
以下是有关实现该方法的文档说明:
如果要控制列的宽度,请实现此方法
当用户双击调整分隔符时。默认情况下,
NSTableView迭代表中的每一行,通过
preparedCellAtRow:column:,并请求cellSize以查找
使用合适的最大宽度
对于较大的行数,进行蒙特卡罗模拟,而不是对每行进行交互。对于性能和准确结果,它是
建议在使用大型表时实现此方法
所以我开始在网上爬行,搜索蒙特卡罗模拟
我现在对蒙特卡罗模拟有了一个简单的了解,
但我不明白它如何适用于这个特殊的问题
我的意思是,最大内容大小是完全随机的。它不会遵循任何方程式或规则,它完全基于将插入单元格的内容,因此蒙特卡罗方法在这里如何应用,它将如何帮助我找到适当的内容大小?蒙特卡罗:不测量列中的每个单元格,只测量一组随机单元格,发现的最大测量值被视为列的最大宽度。 当然,这不会产生最大单元格宽度。但在大多数情况下,这可能非常接近。考虑到该方法的目的,也就是双击resize分隔符来调整列的大小,这个错误并没有什么大不了的。如果你想要精确的值,你不应该指望这个方法
顺便说一句,你为什么要实施这样的方法?你问题的最后一部分最好是作为对原始帖子的评论。好吧,如果是这样的话,它比我想象的要简单。我想实现这一点,因为我现在处理它的方法是测量每个单元格的简单方法:当你有十列,比如说一千行时,它可能非常昂贵。苹果使用蒙特卡罗的本地实现速度非常快。我会试试你的建议。@BenRhayader问题是苹果的方法已经做到了我所描述的。除非需要其他行为或估算方法,否则不需要覆盖它