Ответ 1
Если таблица имеет фиксированную ширину, самый простой способ - просто использовать сегментированный элемент управления NSSegmentedControl
. Сначала добавьте его в свой вид или окно:
Измените его стиль на Small Square
, на режим Select None
и увеличьте количество сегментов до 4
(или сохраните его при 3
, если вам нужны только +
и -
):
Кнопки +, - и другие являются предопределенными изображениями инфраструктуры AppKit (NSAddTemplate
и NSRemoveTemplate
) и доступны непосредственно в Interface Builder. Например. вы можете настроить первые три сегмента следующим образом:
В демонстрационных целях я отключил сегмент -
. В отличие от большинства других кнопок, отключение сегмента сегментированного элемента управления только уменьшает изображение/текст, оно не меняет фон кнопки. Только отключение всего сегментированного элемента управления изменяет фон (и, конечно же, отключает все сегменты).
Конечно, последний сегмент всегда должен быть отключен, иначе он будет кликабельным и изменит его фон при нажатии. Поскольку он не содержит изображения или текста, он по-прежнему выглядит одинаково после того, как он был отключен.
Перейдите к настройке размера и снимите флажок Fixed
для всех сегментов, за исключением последнего, убедитесь, что он установлен для последнего:
Отмена отметки Fixed
делает динамическую ширину сегмента, что означает, что она всегда будет соответствовать минимальной ширине, необходимой для содержимого.
Наконец, разместите элемент управления непосредственно под таблицей и измените ее размер в соответствии с шириной таблицы. Здесь результат:
Почти идеальный, разве вы не думаете?
Все становится все труднее, если ширина таблицы динамическая (например, размер таблицы изменяется вместе с изменением размера окна). Сегментированный элемент управления не поддерживает автоматизацию, это означает, что вам придется программно изменять ширину своего последнего сегмента при каждом изменении размера таблицы. Конечно, это не так сложно сделать и требует лишь небольшого кода, но есть одно альтернативное решение, которое не требует отдельной строки кода.
Уменьшите количество сегментов на единицу и замените последний сегмент на кнопку градиента (NSButton) без заголовка:
Его фон выглядит точно так же, как сегментированный элемент управления, но он поддерживает автоматизацию, чтобы всегда соответствовать размеру таблицы. Есть только одна проблема: она доступна для кликов, и на этот раз ее отключение не работает, так как это изменит фон. Вместо этого просто измените свой тип на Momentary Change
(это означает, что приложение хочет самостоятельно управлять изменением пользовательского интерфейса при нажатии кнопки):
<Т411 >
И после того, как кнопка была правильно установлена и сделана изменчивой, результат будет выглядеть так же хорошо, как и раньше, но на этот раз таблица может быть изменена по размеру, а кнопки внизу будут идеально соответствовать.