2012-06-03 4 views
0

Я пытаюсь изменить размер всех NSTextFields в NSTableView, основанный на просмотре. Я хочу называть [myTextfield sizeToFit] на всех текстовых полях. Мой вопрос заключается в том, как перебирать все представления в моем представлении таблицы. Я попробовал enumerateAvailableRowViewsUsingBlock: но он не работает. Что я могу сделать, чтобы решить эту проблему?Итерация над представлениями в NSTableView

ответ

0

Вы можете получить общее количество строк по int numberOfRows = [yourTableView numberOfRows]. Затем используйте это, чтобы перебрать их и вызвать свой метод. (Предположим, что вы предоставили NSTextField уникальный тег в IB, чтобы отличить его от других подзонов вашего NSTableCellView).

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

Еще одно место, чтобы сделать это в методе tableView:viewForTableColumn:row: делегата NSTalbeView, который вызывается каждый раз, когда вы звоните reloadData на вашем Tableview.

+0

Спасибо @bijan, но это решение не сработало для меня. Когда я печатаю представление через NSLog(), он ссылается на null. – dnlkng

+0

Какой из них относится к null, NSTableCellView или NSTextField? – bijan

+0

NSTableCellView (мой подкласс от него). – dnlkng

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, чтобы получить доступ к представлению строки, которое должно быть уже создано. Я был бы признателен.

+0

То же, что и ваш вопрос о makeIfNecessary :, sud0. Тестирование моего приложения, если я установил его в НЕТ, метод вернул нуль в 5 из 10 тестовых прогонов. Но если я установил его в YES, –

+0

продолжение, если я установил его в YES, он вернет представление, как ожидалось, в тестовых прогонах 25/25. –

Смежные вопросы