Лучший способ кодировать это ... (простой код, много кнопок) - PullRequest
0 голосов
/ 27 мая 2011

У меня есть система для пользователя, чтобы купить продукты. Их много разных продуктов, и это составляет около 80 кнопок на экране Ipad. Это просто, у них просто есть название продукта на кнопках.

Я начал кодирование для одной кнопки

NSString *PriceString = TextView.text;
NSString *Final = [PriceString stringByAppendingString:@"\n Clothes Item 1   £20.00"];
TextView.text = Final;
TotalPrice += 20;

Все, что нужно этому приложению, - это создать текстовый файл с именем и ценой, а затем добавить цену к итогу. Я могу сделать это, однако мне не нравится иметь 80 ibactions. Так что было бы лучшим способом, которым я мог бы сделать это в кратчайшие сроки, а не с 80 отдельными IBactions?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 27 мая 2011

Создайте один метод IBAction, который проверяет атрибут tag sender (кнопки). Назначьте метод в качестве действия для каждой кнопки (скажем, прикосновение вниз). Присвойте каждой кнопке уникальный тег, например, индекс в массиве (например), из которого получена метка кнопки / цена.

-(IBAction)buttonPress:(id)sender
{
    UIButton *b = (UIButton *)sender;
    int tag = b.tag;
    // Use tag to know which button was pressed
    ...
}

Таким образом, ваша логика нажатия кнопки заключается в одном методе, а сама кнопка имеет тег, который однозначно ее идентифицирует.

0 голосов
/ 27 мая 2011

Вы захотите создавать кнопки в коде, а не с помощью Interface Builder. И вместо того, чтобы иметь метод для каждой кнопки, прикрепите данные к кнопке, а затем используйте один метод действия для каждой кнопки. Вы можете либо создать подкласс UIButton и добавить свойство данных, либо использовать встроенное свойство тега UIView, если все, что вам нужно сохранить, это одно целое число (скажем, индекс массива).

0 голосов
/ 27 мая 2011

Подумайте о создании подкласса UIButton и сохраните кнопку продукта, «прикрепленную» к самой внутренней кнопке - таким образом, вы можете иметь 1 действие для всех кнопок и в обработчике действия получить продукт, приобретаемый от кнопки, которая отправляет действие.

У вас будет интерфейс, похожий на:

@interface MyProductButton : UIButton{
   Product *product;
}

@property (nonatomic, retain) Product *product;
- (id)initWithFrame:(CGRect)frame product:(Product*)product;
...
@end
...