2010-01-26 5 views
2

Каков наилучший способ создания пользовательского интерфейса для iPhone для различения нескольких элементов одного типа (например, 2 ползунка), в настоящее время я назначаю элементы управления уникальными «тегами», а затем запрашиваю их в Xcode. Это путь, или я пропущу что-то еще?iPhone, различают несколько элементов управления?

-(IBAction)switchChanged:(UISwitch*)senderSwitch { 
    if([senderSwitch tag] == 1) { 
     NSLog(@"SwitchChanged: Engines"); 
    } 
    ... 

Гэри

ответ

3

Эй Гари! Обычно я выбираю аналогичный подход, хотя предпочитаю использовать целочисленные константы вместо «сырых» чисел. Вот пример:

const int VIEW_TAG_A_SWITCH = 1; 
const int VIEW_TAG_OTHER_SWITCH = 2; 

- (IBAction)switchChanged:(UISwitch*)senderSwitch { 
    switch (senderSwitch.tag) { 
     case VIEW_TAG_A_SWITCH: 
      // do something 
      break; 
     case VIEW_TAG_OTHER_SWITCH: 
      // do something else 
      break; 
    } 
} 

Это делает код более информационной и поможет вам справиться с ситуациями, когда необходимо изменить значение тега UIView по какой-то причине (таким образом, вы только изменить его раз в СИБ и один раз в код).

Это также очень удобно использовать перечисления, когда вам нужно работать с группой элементов управления. Вот фиктивная одиночный выбор группы кнопок, например (что-то подобное тому, что <input type="option" />):

enum GenderOptionButtons { 
    kMaleGenderOptionButton = 10, 
    kFemaleGenderOptionButton, 
    kUndefinedGenderOptionButton, 
    NUM_GENDER_OPTION_BUTTONS 
} 

- (IBAction)buttonDidTouchUpInside:(UIButton *)senderButton { 
    for (int i = kMaleGenderOptionButton; i < NUM_GENDER_OPTION_BUTTONS; i ++) { 
     [(UIButton *)[self.view viewWithTag:i] setSelected:NO]; 
    } 

    senderButton.selected = YES; 
} 
+0

Я использую 'enum' для подобных целей. Он отлично работает и упрощает ведение тегов. –

+0

Спасибо, Иван, просто я ясно, что объявление enum пойдет в файл * .h правильно? – fuzzygoat

+0

Это зависит от того, что вам действительно нужно. Для локального использования этого достаточно, чтобы просто объявить/определить перечисления в файле реализации (.m). –

1

Если вы не имеете прямой ссылки (т.е. IBOutlet) к элементам управления, то «метка» подход хорошо.

Одним из преимуществ этого подхода является то, что вы можете иметь различные виды управления, вызывающие один и тот же метод действий. Одним из основных недостатков этого подхода является синхронизация тегов между IB и XCode.

Смежные вопросы