action: @selector (showAlert :) como passar parâmetro neste método showAlert?
-
19-09-2019 - |
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:)
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.