Domanda

Io sono l'aggiunta pulsante personalizzato alla mia UITableViewCell. Nell'azione di quel pulsante Voglio chiamare la funzione showAlert: e voler passare etichetta della cella nel metodo.

Come posso passare un parametro in questo metodo showAlert: action:@selector(showAlert:)

?
È stato utile?

Soluzione

Non è possibile. È necessario creare un metodo conforme alla IBAction

- (IBAction)buttonXYClicked:(id)sender;

In questo metodo è possibile creare e chiamare l'UIAlertView. Non dimenticare di collegare il pulsante con il metodo in Interface Builder.

Se si vuole distinguere tra più pulsanti (ad esempio si dispone di uno in ogni cella della tabella) è possibile impostare la proprietà tag del pulsante. E quindi controllare sender.tag dal tasto che il clic proviene.

Altri suggerimenti

Se si utilizza Button nella Tableviewcell allora u deve aggiungere valore tag per il pulsante di ogni cella e impostare il metodo addTarget con id come parametro.

Codice di esempio:

Si deve digitare il codice seguito in modo 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
}

La risposta di Jay è grande, ma se si dispone di più sezioni non funzionerà poiché l'indexRow è locali ad una sezione .

Un altro metodo, se si sta utilizzando i pulsanti in un TableView che dispone di più sezioni, è quello di passare gli eventi di tocco.

Dove si dichiara il pulsante in un caricatore pigro:

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

    return _awesomeButton;
}

La chiave qui è quello di catena i tuoi eventi sul metodo di selezione. Non è possibile passare i propri parametri, ma è possibile passare gli eventi.

La funzione del pulsante è agganciato 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);
}

La chiave qui è la funzione indexPathForRowAtPoint. Questa è una funzione nifty in UITableView che vi darà l'indexPath in qualsiasi punto. Altrettanto importante è la funzione locationInView perché è necessario il contatto nel contesto del tableView in modo che possa individuare l'indexPath specifica.

Questo vi permetterà di sapere quale tasto è stato, in una tabella con più sezioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top