проблема с селектором в iphone? - PullRequest
0 голосов
/ 29 марта 2010

У меня есть приложение, в котором я генерирую uibuttons динамически, хочу использовать тот же @selector ... Теперь, когда sooon генерируется как событие, я хочу проверить значения и передать его через селектор, как я могу реализовать этот код? Может ли кто-нибудь сказать мне учебник сортировки, где кнопки динамически генерируются и отображается проверка для конкретного нажатия кнопки? Пожалуйста, помогите ...

Ответы [ 2 ]

2 голосов
/ 30 марта 2010

Не уверен, что вы называете "динамически" ... Объекты Objective-C всегда создаются динамически. Возможно, вы имеете в виду ситуацию, когда вы хотите создать серию очень похожих кнопок с одинаковым кодом? Да, это довольно распространенная задача. Например, в калькуляторе, таком как приложение, нам нужно десять кнопок с цифрами, почему бы не создать их с одним блоком кода? Итак:

- (void)makeButtons{
    UIButton * aButton;
    for(int i = 0; i < 10; i++){
        aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        aButton.frame = CGRectMake(0, i*45, 60, 40);
        [aButton addTarget:self action:@selector(digitClick:) forControlEvents:UIControlEventTouchUpInside];
        [aButton setTitle:[NSString stringWithFormat:@"%d",i] forState:UIControlStateNormal];
        aButton.tag = i;
        [self.view addSubview:aButton];
    }
}

- (void)digitClick:(id)sender{
    UIButton * aButton =(UIButton *)sender;
    NSLog(@"cliced button with title %d",aButton.tag); 
}

мы используем свойство tag , чтобы найти индекс нажатой кнопки, это часто используется, но есть и другие способы. Например, сохранить созданные кнопки в массиве, а затем проверить, равен ли sender одному из элементов массива: ... if ([allButtons objectAtIndex: i] == отправитель) ...

Если вы хотите передать некоторые данные, например строку из каждой кнопки, просто создайте массив с этими объектами, а затем получите к нему доступ, используя тег в качестве индекса.

0 голосов
/ 29 марта 2010

Попробуйте:

[self.button1 addTarget:self action:@selector(buttonTouchDown:) forControlEvents:UIControlEventTouchDown];
[self.button2 addTarget:self action:@selector(buttonTouchDown:) forControlEvents:UIControlEventTouchDown];

- (IBAction)buttonTouchDown:(id)sender
{
  if (sender == self.button1) NSLog(@"Button-1");
  if (sender == self.button2) NSLog(@"Button-2");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...