Objective c 在NSTableView中迭代视图

Objective c 在NSTableView中迭代视图,objective-c,cocoa,nstableview,Objective C,Cocoa,Nstableview,我正在尝试调整基于视图的NSTableView中所有NSTextFields的大小。我想在所有文本字段上调用[myTextfield sizeToFit]。我的问题是如何迭代tableview中的所有视图。我尝试使用Block:枚举可用的视图,但它不起作用。如何解决此问题?您可以通过int numberOfRows=[yourTableView numberOfRows]获得总行数。然后使用它来迭代它们并调用您的方法。(假设您在IB中为NSTextField指定了一个唯一的标记,以将其与NSTa

我正在尝试调整基于视图的NSTableView中所有NSTextFields的大小。我想在所有文本字段上调用[myTextfield sizeToFit]。我的问题是如何迭代tableview中的所有视图。我尝试使用Block:枚举可用的视图,但它不起作用。如何解决此问题?

您可以通过
int numberOfRows=[yourTableView numberOfRows]
获得总行数。然后使用它来迭代它们并调用您的方法。(假设您在IB中为NSTextField指定了一个唯一的标记,以将其与NSTableCellView的其他子视图区分开来)

for(int i=0;i

另一个地方是NSTABLEVIEW委托方法
tableView:viewForTableColumn:row:
,每次调用
reloadData
时都会调用该方法。

您可以通过
int numberOfRows=[yourTableView numberOfRows]获得总行数
。然后使用它对它们进行迭代并调用您的方法(假设您在IB中为NSTextField指定了一个唯一的标记,以将其与NSTableCellView的其他子视图区分开来)

for(int i=0;i

另一个地方是NSTABLEVIEW委托方法
tableView:viewForTableColumn:row:
,每次在tableView上调用
reloadData
时都会调用该方法。

试试这个方法。在IB中,将文本字段的标记设置为您想要的(在本例中,我使用1)。然后,您可以通过调用
viewtcolumn:row:makeifrequired:
访问每行的
NSTableCellView
。确保
makeifrequired:
设置为
YES

代码:

intx;
对于(x=0;x<[tableView numberOfRows];x++){
NSTableCellView*cellView=[tableView视图在列:0行:x makeIf必要时:是];
NSTextField*tField=[cellView视图带标记:1];
[tField sizeToFit];
}

这对我来说很有效,所以如果对你不起作用,我会感到惊讶。如果有人能解释一下为什么
makeifrequired:
必须是
YES
才能访问应该已经创建的行视图,我将不胜感激。

试试这个。在IB中,将文本字段的标记设置为你想要的(在本例中,我使用1)。然后,您可以通过调用
viewtcolumn:row:makeifrequired:
访问每行的
NSTableCellView
。确保
makeifrequired:
设置为
YES

代码:

intx;
对于(x=0;x<[tableView numberOfRows];x++){
NSTableCellView*cellView=[tableView视图在列:0行:x makeIf必要时:是];
NSTextField*tField=[cellView视图带标记:1];
[tField sizeToFit];
}

这对我来说很有效,所以如果对你不起作用,我会感到惊讶。如果有人能解释一下为什么
makeifrequired:
必须是
YES
才能访问应该已经创建的行视图,我将不胜感激。

谢谢@bijan,但这个解决方案对我不起作用。当我通过NSLog()打印视图时它指的是null。哪一个指的是null、NSTableCellView还是NSTextField?NSTableCellView(它的子类)。当我尝试在tableView:viewForColumn:row中执行此操作时,我可以调用[mytextfield sizeToFit]但问题是我无法确定我的表中哪个textfield的宽度最大。谢谢@bijan,但这个解决方案对我不起作用。当我通过NSLog()打印视图时,它指的是null。哪个是null、NSTableCellView还是NSTextField?NSTableCellView(它的子类)。当我尝试在tableView:viewForColumn:row中执行此操作时,我可以调用[mytextfield sizeToFit]但问题是,我无法确定表中哪个文本字段的宽度最大。与您在MakeIfEssential:,sud0上的问题相同。在测试我的应用程序时,如果我将其设置为“否”,则该方法在10次测试运行中有5次返回了零。但如果我将其设置为“是”,则继续,如果我将其设置为“是”,则会在25/25次测试运行中返回预期的视图。与您在上的问题相同MakeifEssential:,sud0。在测试我的应用程序时,如果我将其设置为“否”,则该方法在10次测试运行中有5次返回nil。但是如果我将其设置为“是”,则继续,如果我将其设置为“是”,则会在25/25次测试运行中返回预期的视图。
    for (int i = 0; i < numberOfRows; i++) {
        NSTableCellView *someTableCellView = [[yourTableView viewAtColumn:(NSInteger) row:i makeIfNecessary:FALSE];
        NSTextField *yourTextField = [someTableCellView viewWithTag:(NSInteger)];
    }
int x;
for (x = 0; x < [tableView numberOfRows]; x++) {
    NSTableCellView *cellView = [tableView viewAtColumn:0 row:x makeIfNecessary:YES];
    NSTextField *tField = [cellView viewWithTag:1];
    [tField sizeToFit];
}