NSPopupButton в представлении NSTableView

Я использую основные данные с обновленным XCode. У меня есть таблица, основанная на представлениях, с NSPopupButtons в одном из столбцов. В таблице есть контроллер массива, который получает данные от объекта A. Существует еще один контроллер массива для объекта B. Именно этот объект B должен заполнять элементы всплывающих кнопок.

NSPopupButton вне таблицы может быть заполнено без проблем, так что это должно быть связано с таблицей!

Как мне заполнить всплывающую кнопку, которая находится в столбце моей таблицы?

Часть таблицы с кнопкой всплывающего окна.


person Carelinkz    schedule 22.12.2012    source источник
comment
Вы изучали подклассы NSTableViewCell?   -  person Nate Chandler    schedule 23.12.2012
comment
Нет, у меня нет. Это может сработать, но действительно ли мне следует действовать именно так? Всплывающее окно внутри ячейки кажется основной причиной использования таблиц на основе представлений, поэтому я предпочитаю держаться подальше от подклассов, пока это возможно :-)   -  person Carelinkz    schedule 24.12.2012
comment
Другая возможность — использовать NSPopUpButtonCell. Это, однако, может иметь не совсем тот вид, на который вы надеетесь.   -  person Nate Chandler    schedule 24.12.2012
comment
В документации NSTableCellView указано, что класс NSTableCellView представляет собой многоразовое представление контейнера, отображаемое для конкретной ячейки в экземпляре NSTableView, который использует строки для содержимого. Свойства imageView и textField связаны в Interface Builder. Дополнительные свойства можно добавить, создав подкласс NSTableCellView, добавив необходимые свойства и подключив их программно или в построителе интерфейсов.   -  person Nate Chandler    schedule 24.12.2012
comment
Ах, вы правы. А жаль, я надеялся на быстрое решение привязки.   -  person Carelinkz    schedule 24.12.2012
comment
Я не уверен, что понимаю проблему. Почему вы используете табличное представление на основе представления? Почему нельзя привязать привязку contentValues к ячейке?   -  person paulmelnikow    schedule 27.12.2012
comment
Я не очень разбираюсь в таблицах, но я понимаю, что, особенно с таблицей на основе представлений, должно быть проще размещать в ячейках вещи, отличные от базовых (например, всплывающие окна). И я пытался связать значения содержимого, но это как-то не сработало. Я делаю что-то не так здесь? (т. е. должно это работать?)   -  person Carelinkz    schedule 27.12.2012


Ответы (3)


Вы можете сделать следующее:

  1. Увеличьте высоту строки табличного представления до 22 пикселей или выше.
  2. Привязать к objectValue.menuValues (очевидно, что-то, что вы добавляете к своему objectValue).
  3. NSPopupButton должен быть размещен как подвид NSTableCellView.

Таким образом, пока ваш objectValue имеет привязку, способную заполнять меню NSPopupButton, вам не нужно напрямую обращаться к нему. Отсюда вы также можете установить выход selector в класс вашего контроллера делегата/представления и использовать некоторые изящные superview копания, чтобы найти NSTableCellView, удерживающий его, и работать оттуда.

Это сложно, я знаю, но это почти нулевой код. Когда-то я смотрел на IB свысока из-за того, что он слишком "n00b", но Bindings делает его довольно мощным инструментом.

person Aditya Vaidyam    schedule 13.03.2013
comment
Спасибо за предложение! Я посмотрю на это, как только у меня будет возможность, надеюсь, в понедельник. - person Carelinkz; 16.03.2013
comment
Нет проблем, мне интересно посмотреть, как это работает для вас. - person Aditya Vaidyam; 16.03.2013
comment
Извиняюсь, после капитального ремонта пользовательского интерфейса эта проблема больше не присутствует в моем проекте, и, к сожалению, я не могу легко проверить ваше предложение. Я думаю, что столкнусь с этой проблемой позже, и я обязательно сообщу о своих результатах! - person Carelinkz; 26.03.2013

У меня определенно была работающая находка NSPopupButtonCell на основе ячеек. Вы должны иметь возможность добиться того же с таблицами на основе представлений. Привязки сильно различаются, поскольку вы привязываетесь непосредственно к объектам в представлении. Поэтому привяжите содержимое вашего всплывающего окна непосредственно к источнику данных. Создайте ArrayController в IB для объекта B и напрямую привяжите его к содержимому всплывающих окон, а также привяжите contentValue к полю объекта B, которое вы хотите отобразить.

Затем привяжите содержимое столбца всплывающего окна к объекту A, а теперь привяжите значение всплывающего окна к объектному значению представления ячейки таблицы (имя поля объекта A).

person Duncan Groenewald    schedule 14.08.2013

Необходимо передать контроллер через Files' Owner, а не привязывать его напрямую к всплывающей кнопке. (Некоторые говорят, что это ошибка в Xcode..)

Итак, мое решение использует IBOutlet (currencyCtrl) в владельце файла, который привязан к контроллеру массива (в вашем случае для объекта B). Для NSPopupButton вы должны использовать следующие привязки:

введите здесь описание изображения

person Christian Krueger    schedule 27.07.2017