0

I am trying to resize all NSTextFields in an NSTableView that is view based. I want to call [myTextfield sizeToFit] on all textfields. My question is how to iterate over all views in my tableview. I tried enumerateAvailableRowViewsUsingBlock: but it doesn't work. What can i do to solve this?

4

2 回答 2

3

尝试这个。在 IB 中,将文本字段的标签设置为您想要的任何内容(在此示例中,我使用 1)。然后,您将能够NSTableCellView通过调用来访问每一行的viewAtColumn:row:makeIfNecessary:。确保makeIfNecessary:设置为YES.

代码:

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];
}

这对我有用,所以如果它不适合你,我会感到惊讶。如果有人可以就为什么makeIfNecessary:必须YES访问应该已经创建的行视图提供一些见解,我将不胜感激。

于 2012-12-22T00:42:33.597 回答
0

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

    for (int i = 0; i < numberOfRows; i++) {
        NSTableCellView *someTableCellView = [[yourTableView viewAtColumn:(NSInteger) row:i makeIfNecessary:FALSE];
        NSTextField *yourTextField = [someTableCellView viewWithTag:(NSInteger)];
    }

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

于 2012-06-04T21:02:30.543 回答