Pergunta

Estou adicionando botão personalizado à minha UITableViewCell. Na ação desse botão Quero chamar a função showAlert: e quer passar rótulo celular no método.

Como posso passar um parâmetro neste método showAlert:? action:@selector(showAlert:)

Foi útil?

Solução

Isso não é possível. Você tem que criar um método em conformidade com IBAction

- (IBAction)buttonXYClicked:(id)sender;

Neste método, você pode criar e chamar o UIAlertView. Não se esqueça de ligar o botão com o método no Interface Builder.

Se você gosta de distinguir entre vários botões (por exemplo, você tem um em cada célula da tabela), você pode definir a propriedade tag do botão. E depois verificar sender.tag a partir do qual o botão de clique vem.

Outras dicas

Se você estiver usando Button em Tableviewcell então u tem que agregar valor tag para o botão de cada célula e definir o addTarget método com id como um parâmetro.

Exemplo de código:

Você tem que digitar o código abaixo no método cellForRowAtIndexPath.

{

     // Set tag to each button
        cell.btn1.tag = indexPath.row; 
        [cell.btn1 setTitle:@"Select" forState:UIControlStateNormal];  // Set title 

     // Add Target with passing id like this
        [cell.btn1 addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];    


     return cell;

}

-(void)btnClick:(id)sender
{

    UIButton* btn = (UIButton *) sender;

     // here btn is the selected button...
        NSLog(@"Button %d is selected",btn.tag); 


    // Show appropriate alert by tag values
}

A resposta de Jay é grande, mas se você tiver várias seções não vai funcionar desde o indexRow é locais para uma seção .

Outro método, se você estiver usando botões em uma TableView que tem várias seções, é passar os eventos de toque.

Onde você declarar seu botão em um carregador de preguiçoso:

- (UIButton *)awesomeButton
{
    if(_awesomeButton == nil)
    {
        _awesomeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [_awesomeButton addTarget:self.drugViewController action:@selector(buttonPressed:event:) forControlEvents:UIControlEventTouchUpInside];
    }

    return _awesomeButton;
}

A chave aqui é a cadeia de seus eventos para o método selector. Você não pode passar os seus próprios parâmetros, mas você pode passar os eventos.

A função do botão está ligado a:

- (void)buttonPressed:(id)sender event:(id)event
{
    NSSet *touches = [event allTouches];
    UITouch *touch = [touches anyObject];

    CGPoint currentTouchPosition = [touch locationInView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint: currentTouchPosition];

    NSLog(@"Button %d was pressed in section %d",indexPath.row, indexPath.section);
}

A chave aqui é a função indexPathForRowAtPoint. Esta é uma função bacana em UITableView que lhe dará a indexPath em qualquer ponto. Também importante é a função locationInView porque você precisa do toque no contexto do tableView para que ele possa identificar o indexPath específico.

Isso permitirá que você para saber qual botão foi, em uma tabela com várias seções.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top