У меня есть то, что я считал довольно простой потребностью, но я не уверен, как ее реализовать.
В различных точках моего интерфейса пользователю предлагается выбрать что-то довольно визуальное (например, выбрать макет для страницы или вариант цвета). Этот выбор делается из заранее определенного набора параметров. Обычно вы бы использовали NSPopUpButton или, может быть, NSTableView, но я бы хотел, чтобы пользователь видел эскизы каждого варианта выбора. Эти эскизы также должны быть приличного размера — не менее 100x100 пикселей. Каждая миниатюра также должна сопровождаться текстовой меткой. Одновременно допускается только один выбор.
Apple реализует нечто подобное в iWeb:
iweb http://img187.imageshack.us/img187/5744/iweb.jpg а>
Конечно, вы привыкли видеть что-то подобное с маленькими иконками:
Я думаю, что NSCollectionView — это место для начала, но я когда-либо видел, чтобы это использовалось только в гораздо более сложных сценариях (например: отображение содержимого каталога, поддержка перетаскивания и т. д.). Поэтому большинство код, который я нашел, довольно сложен.
Есть ли более простое решение для заполнения этого представления статическими предопределенными данными и просто разрешения простого выбора? Другими словами, я ищу функциональность всплывающей кнопки, но другой пользовательский интерфейс.
Обновление: решение
Я использовал IKImageBrowser, как было предложено. Это руководство было очень полезным. В IB: я только что сделал IKImageBrowser в своем интерфейсе, завернул его в представление прокрутки и сделал его источником данных объекта браузера. В коде: реализовал протокол источника данных в моем контроллере, как объясняется в учебнике, установил для AllowMultipleSelection и allowEmptySelection значение NO, создал настраиваемый объект изображения, используя представление URL-изображения точно так, как описано в руководстве.
Затем, чтобы получить выбор, я написал следующий метод, который будет запускаться, когда пользователь нажимает кнопку «ОК»:
NSIndexSet *retval = [imageBrowser selectionIndexes];
NSInteger i = [retval firstIndex]; //the index of the selection. Corresponds to index in my array data source
NSString* path = [[styleViewData objectAtIndex:i] imageRepresentation]; //path to selected image, if you need it
Учебник очень полезен — просто игнорируйте информацию о добавлении изображений, ползунках масштабирования и тому подобном.