Это хорошая практика, чтобы использовать много IBOutlets? - PullRequest
3 голосов
/ 21 июня 2011

Я все еще новичок в iOS, и поэтому в последнее время я делал много уроков.

Допустим, я делал приложение, такое как калькулятор, скажем, с 24 кнопками. Я видел пример кода, в котором метка кнопки используется, чтобы выяснить, что это за кнопка, но это кажется очень хитрым, особенно при попытке перевести приложение.

Так что, лучше вместо этого кусать пулю и иметь один IBOutlet для каждой кнопки вместо этого? почему или почему нет?

Если нет, то какой самый элегантный способ сделать это, оставаясь в парадигме MVC?


Хорошо, я просто оглянулся на свой код, и теперь я чувствую себя больше как нуб, чем раньше ... Я действительно говорил о IBActions, а не о IBOutlets ... Должен ли я иметь целую кучу IBActions для разных кнопки? вот как это выглядит прямо сейчас в файле viewController.h:

- (IBAction)digitPressed:(UIButton *)sender;
- (IBAction)operationPressed:(UIButton *)sender;
- (IBAction)dotPressed:(UIButton *)sender;
- (IBAction)button_mClear_Pressed:(UIButton *) sender;
- (IBAction)button_mPlus_Pressed:(UIButton *) sender;
- (IBAction)button_mMinus_Pressed:(UIButton *) sender;
- (IBAction)button_mRecall_Pressed:(UIButton *) sender;
- (IBAction)button_AC_Pressed:(UIButton *) sender;
- (IBAction)button_PlusMinus_Pressed:(UIButton *) sender;

почему это просто кажется мне повторяющимся и не элегантным?

Ответы [ 3 ]

3 голосов
/ 21 июня 2011

Как правило, у вас есть одинаковые кнопки, запускающие одно и то же действие, идея состоит в том, что похожие действия кнопок должны иметь некоторый общий код между ними. Затем вы используете свойство tag, чтобы определить, какая кнопка была нажата. Например, цифровые кнопки запускают определенное действие, операторные кнопки запускают другое действие и т. Д.

- (void)didClickOperatorButton:(id)button 
{
    switch ([button tag])
    {
        case kAdditionOperation: 
            // Do the addition operation ...
            // etc..

Вы можете установить свойство tag для любого элемента управления в Интерфейсном Разработчике.

2 голосов
/ 21 июня 2011

Если вы используете IBOutlets и подключаете их в Interface Builder / Xcode 4, это скорее дело вкуса, чем решение о программировании. И делать это или нет, не обязательно влияет на парадигму MVC.

Это ваш выбор, если вы сохраняете 24 IBOutlets в своем контроллере вида и загружаете кнопки из кончика, так как, возможно, проще разместить их в вашем интерфейсе или иметь массив, полный кнопок, и добавить их в свой интерфейс. просматривать программно и настраивать их с помощью правильных действий.

Вы также можете иметь кнопки в разных кончиках для разных контроллеров представления - скажем, для цифровой клавиатуры, простых команд и более высоких команд и функций. каждый из контроллеров представления будет иметь делегата определенного протокола, который все будет реализован на «BrainController». Эта установка может быть немного излишней для простого калькулятора, но позволит вам использовать кончики, без контролера представления, переполненного IBOutlets , И вы можете повторно использовать его в другом проекте, то есть на цифровой клавиатуре в приложении с интерфейсом дистанционного управления.

1 голос
/ 21 июня 2011

Если вы используете XIB и много объектов, тогда да.Если вы планируете заставить объект делать что-то особенное, например, отключить кнопку во время вызова некоторого метода в коде, затем YES, подключить IBOutlet.Если вы только подключаете кнопки к IBActions, тогда НЕТ, просто подключите любую кнопку (без IBOutlet) к вашему IBAction, это сэкономит вам при подключении нескольких объектов.

...