Как правильно использовать NSCollectionView и Outlets?

Я отчаянно пытаюсь подключить элементы управления NSViews, которые будут находиться в NSCollectionView, используя розетки. Представление коллекции подается с помощью NSArrayController.

Я создал NSView в отдельном файле NIB и в реализации NSCollectionViewItem перезаписал copyWithZone для его загрузки:

    -(id)copyWithZone:(NSZone *)zone
{
    id result = [super copyWithZone:zone];

    [NSBundle loadNibNamed:@"InputView" owner:result];

    return result;
}

Я использовал этот подход в соответствии с этими инструкциями.

К сожалению, происходит следующее:

альтернативный текст

NSView выглядит так:

альтернативный текст

NSCollectionView находится в NSScrollView, а полоса прокрутки настроена на автоматическое включение. Но, как видите, полосы прокрутки нет.

Я действительно не понимаю, что мне нужно сделать, чтобы NSCollectionView знал размеры своих NSView.

Это работало раньше, когда у меня не было отдельного NIB-файла, но тогда я не мог установить выходные соединения из представления к элементу :-(


person André Hoffmann    schedule 03.08.2009    source источник
comment
Ссылка на инструкцию битая.   -  person febeling    schedule 16.06.2011
comment
Ну, это довольно старый пост. Я написал кое-что об этом здесь, что может вам помочь: andrehoffmann.wordpress.com/2009/08/29/   -  person André Hoffmann    schedule 13.12.2011


Ответы (1)


Сколько элементов находится в контроллере массива? Ваш вывод выглядит правильно для того, что вы описали, при условии, что в контроллере есть как минимум 14 вещей (1 представление для каждого элемента). Размер просто не тот. Непонятно, какую проблему вы пытаетесь решить.

Возможно, вы искали сетку, и поэтому вам нужно позвонить setMaximumNumberOfColumns:? Или, возможно, ваши представления не изменяются, как вы ожидаете (отметьте -maxItemSize и -minItemSize)?

person Rob Napier    schedule 03.08.2009
comment
Я забыл упомянуть, что NSCollectionView находится в NSScrollView, а полоса прокрутки настроена на автоматическое включение. Но, как видите, полосы прокрутки нет. Я действительно не понимаю, что мне нужно сделать, чтобы NSCollectionView знал размер своих NSView. Надеюсь, я немного прояснил проблему. - person André Hoffmann; 03.08.2009
comment
+1. Да, если вы не получаете ожидаемого макета, вам обязательно нужно вызвать setMinItemSize: и/или setMaxItemSize:. Если minItemSize равен {0, 0}, то представление коллекции попытается поместить все представления в видимую область и не будет прокручиваться. - person kperryua; 03.08.2009
comment
В ИБ еще можно попробовать отключить авторесайзинг пружин и стоек. Я думаю, что NSCollectionView использует их как подсказки, чтобы выяснить, какими должны быть настройки minItemSize и maxItemSize по умолчанию. Если вы отключите автоматическое изменение размера, я полагаю, что NSCollectionView сохранит элементы того же размера, что и представление в IB. - person kperryua; 03.08.2009
comment
Спасибо кперрюа. Я только что попробовал, но, к сожалению, это не сработало для меня. Похоже, у человека нет другого выбора, кроме как установить minItemSize. - person André Hoffmann; 04.08.2009