Возможно ли присвоение одного и того же метода действия нескольким объектам пользовательского интерфейса Какао, например NSButton? - PullRequest
1 голос
/ 05 февраля 2011

В настоящее время я изучаю программирование на ObjC и Cocoa, происходящее из мира Java. Чтобы проверить свои текущие навыки и прогресс в обучении, я создаю небольшое приложение-калькулятор с нуля (OSX, а не iOS).

Мой пользовательский интерфейс имеет 10-значный кнопки 0-9 среди других.

Моя первая мысль состояла в том, что, поскольку действие получает ссылку отправителя, сделать одно действие как -(IBAction)captureDigit:(id)sender, а затем просто взять цифру из названия кнопки. Но конструктор интерфейса позволяет связать действие только с одним отправителем.

Итак, я создал 10 действий captureDigit в моем контроллере.

Мой вопрос: возможен ли первый вариант? Я думал о программном добавлении действий (возможно ли это?) К кнопкам, но тогда мне нужно было бы добавить все цифровые кнопки в качестве выходов для моего контроллера.

Бонусный вопрос: NSButton может содержать какое-то невидимое значение? Не удалось найти это в документации. Может быть, это нарушит шаблон MVC, поскольку пользовательский интерфейс будет знать о данных, специфичных для приложения?

Спасибо за любой полезный и добрый ответ заранее, я все еще учусь

Ответы [ 4 ]

4 голосов
/ 05 февраля 2011

Вы можете подключить множество отправителей к одной цели / действию, если вы перетаскиваете Control от отправителей к цели, так что это не проблема.

ЗАПРОСИТЕ свой бонусный вопрос, любой NSView имеет целое число tag, котороеВы можете установить в Интерфейсном Разработчике.Это удобный способ различать несколько похожих представлений.

2 голосов
/ 05 февраля 2011

Вы можете однозначно подключить более одной кнопки к одному действию. Также вы можете использовать поле tag любого объекта, чтобы присвоить ему значение "за кадром".

0 голосов
/ 05 февраля 2011

Чтобы упростить задачу, в IB создайте одну кнопку и перетащите ее из NSButton к владельцу файла, затем отобразятся все методы, которые мы можем отправить в NSButton, затем выберите captureDigit:Теперь скопируйте и вставьте кнопку, измените заголовок, скопируйте и вставьте в IB, сохраняйте связь и используйте поле тега, как costique, как уже сказал nitrex.

0 голосов
/ 05 февраля 2011

Вполне возможно добавить столько действий к одному контроллеру.Как Interface Builder мешает вам это сделать?

В вашем контроллере может быть экземпляр NSDictionary, в котором вы можете сопоставить NSButtons с любыми данными, которые вы хотите.

...