Программный вызов действия кнопки приводит к NSInvalidArgumentException - PullRequest
0 голосов
/ 16 января 2020

У меня есть tableview, каждая ячейка содержит текст и кнопку. Для каждой кнопки в каждой ячейке в cellForRowAtIndexPath я определяю действие с помощью селектора следующим образом:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ProductTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ProductCell" forIndexPath:indexPath];

    cell.stateButton.tag = indexPath.row;

    [cell.stateButton addTarget:self action:@selector(stateChange:) forControlEvents:UIControlEventTouchUpInside];

    /// Rest of code

    return cell;
}

В какой-то момент в потоке я хочу создать действие для всех кнопок в моем tableview , Я делаю это так:

#pragma mark - Delegate
- (void)onAllSwitchesStateChange{

    for(int i = 0; i < [[SsrDeviceManager instance] ssrDevices].count; i ++){

        ProductTableViewCell* cell = (ProductTableViewCell *)[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
        UIButton* stateButton = [cell stateButton];
        [stateButton performSelector:@selector(stateChange:) withObject:nil];

    }
}

Это мой метод выбора:

-(void)stateChange:(UIButton*)sender{

    [self.activityIndicator sizeToFit];
    [sender addSubview:self.activityIndicator];
    [self.activityIndicator startAnimating];
    //// Rest of code
}

Однако, почему я пытаюсь запустить этот код, я получаю сообщение об ошибке, и приложение вылетает с этим сообщение:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIButton stateChange:]: unrecognized selector sent to instance 0x1023686d0'
*** First throw call stack:
(0x233133180 0x23230b9f8 0x23304f9bc 0x25f94c220 0x2331389c8 0x23313a65c 0x101073bdc 0x100fdd844 0x25f922300 0x25f3cb424 0x25f3cb744 0x25f3ca7b0 0x25f9595c4 0x25f95a7ec 0x25f93a85c 0x25fa009d4 0x25fa03100 0x25f9fc330 0x2330c4f1c 0x2330c4e9c 0x2330c4784 0x2330bf6c0 0x2330befb4 0x2352c079c 0x25f920c38 0x10102b794 0x232b828e0)

Как сгенерировать действие нажатия для всех кнопок одновременно

Ответы [ 2 ]

1 голос
/ 18 января 2020

UIButton не имеет метода stateChange:. У вашего класса есть метод stateChange:. Вы можете просто вызвать метод вашего собственного класса, например [self stateChange:stateButton]. Если вы хотите, чтобы кнопка отправляла сообщение, которое она отправила бы, даже если произошел определенный тип, вы можете сделать что-то вроде [stateButton sendActionsForControlEvents:UIControlEventTouchUpInside].

1 голос
/ 17 января 2020

«Как создать действие для всех кнопок одновременно»

Само понятие не имеет смысла. Представление таблицы - просто представление. Он позволяет пользователю общаться с вами (приложением), потому что это сенсорный интерфейс, но сам по себе он не является источником активности; это просто представляет данные.

Если вы хотите, чтобы что-то произошло, безумно обращаться ко всем вашим кнопкам и просить их всех начать какое-то действие. Просто сделайте со своими данными, что угодно, что вы хотите сделать.

...