NSTableView с кнопками +/- как в системных настройках, используя только Interface Builder - программирование
Подтвердить что ты не робот

NSTableView с кнопками +/- как в системных настройках, используя только Interface Builder

Apple обычно размещает кнопки +/- под таблицами (NSTableView), например. в Системных настройках для сети или пользователей и групп. См. Изображение ниже:

Table Bottom - User & Groups System Prefs

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

4b9b3361

Ответ 1

Если таблица имеет фиксированную ширину, самый простой способ - просто использовать сегментированный элемент управления NSSegmentedControl. Сначала добавьте его в свой вид или окно:

Segmented Control

Измените его стиль на Small Square, на режим Select None и увеличьте количество сегментов до 4 (или сохраните его при 3, если вам нужны только + и -):

Segmented Control Setup

Кнопки +, - и другие являются предопределенными изображениями инфраструктуры AppKit (NSAddTemplate и NSRemoveTemplate) и доступны непосредственно в Interface Builder. Например. вы можете настроить первые три сегмента следующим образом:

Segment 0 SetupSegment 1 SetupSegment 2 Setup

В демонстрационных целях я отключил сегмент -. В отличие от большинства других кнопок, отключение сегмента сегментированного элемента управления только уменьшает изображение/текст, оно не меняет фон кнопки. Только отключение всего сегментированного элемента управления изменяет фон (и, конечно же, отключает все сегменты).

Конечно, последний сегмент всегда должен быть отключен, иначе он будет кликабельным и изменит его фон при нажатии. Поскольку он не содержит изображения или текста, он по-прежнему выглядит одинаково после того, как он был отключен.

Перейдите к настройке размера и снимите флажок Fixed для всех сегментов, за исключением последнего, убедитесь, что он установлен для последнего:

Segment 0 Size SetupSegment 1 Size SetupSegment 2 Size SetupSegment 3 Size Setup

Отмена отметки Fixed делает динамическую ширину сегмента, что означает, что она всегда будет соответствовать минимальной ширине, необходимой для содержимого.

Наконец, разместите элемент управления непосредственно под таблицей и измените ее размер в соответствии с шириной таблицы. Здесь результат:

The Result

Почти идеальный, разве вы не думаете?

Все становится все труднее, если ширина таблицы динамическая (например, размер таблицы изменяется вместе с изменением размера окна). Сегментированный элемент управления не поддерживает автоматизацию, это означает, что вам придется программно изменять ширину своего последнего сегмента при каждом изменении размера таблицы. Конечно, это не так сложно сделать и требует лишь небольшого кода, но есть одно альтернативное решение, которое не требует отдельной строки кода.

Уменьшите количество сегментов на единицу и замените последний сегмент на кнопку градиента (NSButton) без заголовка:

Gradient Button

Его фон выглядит точно так же, как сегментированный элемент управления, но он поддерживает автоматизацию, чтобы всегда соответствовать размеру таблицы. Есть только одна проблема: она доступна для кликов, и на этот раз ее отключение не работает, так как это изменит фон. Вместо этого просто измените свой тип на Momentary Change (это означает, что приложение хочет самостоятельно управлять изменением пользовательского интерфейса при нажатии кнопки):

<Т411 >

И после того, как кнопка была правильно установлена ​​и сделана изменчивой, результат будет выглядеть так же хорошо, как и раньше, но на этот раз таблица может быть изменена по размеру, а кнопки внизу будут идеально соответствовать.

Sample Window SmallSample Window Bigger