Frage

Ich füge benutzerdefinierte Schaltfläche zu meinem UITableViewCell. In der Wirkung dieser Schaltfläche Ich möchte showAlert: Funktion aufrufen und wollen Zelle Label in der Methode zu übergeben.

Wie kann ich einen Parameter in dieser showAlert Methode übergeben: action:@selector(showAlert:)

?
War es hilfreich?

Lösung

Das ist nicht möglich. Sie haben ein Verfahren zu schaffen, um IBAction konformen

- (IBAction)buttonXYClicked:(id)sender;

Bei dieser Methode können Sie erstellen und die UIAlertView nennen. Vergessen Sie nicht die Taste mit der Methode im Interface Builder zu verbinden.

Wenn Sie zwischen mehreren Tasten unterscheiden möchten (z Sie haben eine in jeder Tabellenzelle) können Sie die Tag-Eigenschaft der Schaltfläche. Und dann überprüfen sender.tag aus dem Knopf der Klick kommt.

Andere Tipps

Wenn Sie Taste in Tableviewcell verwenden, dann müssen u-Tag-Wert jeder Taste der Zelle hinzufügen und die Methode addTarget mit der ID als Parameter eingestellt.

Beispielcode:

Sie haben Folgenden Code in cellForRowAtIndexPath Methode Typ.

{

     // 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
}

Jay Antwort ist groß, aber wenn Sie mehrere Abschnitte wird es nicht funktionieren, da die indexRow ist lokal auf einen Abschnitt .

Eine andere Methode, wenn Sie Schaltflächen in einem Tableview verwenden, die mehrere Abschnitte aufweist, ist die Touch-Ereignisse passieren.

Wenn Sie Ihre Schaltfläche in einem faulen loader deklarieren:

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

    return _awesomeButton;
}

Der Schlüssel hier ist zu Kette Ihre Veranstaltungen auf die Auswahlmethode. Sie können Ihre eigenen Parameter nicht passieren, aber Sie können die Ereignisse passieren.

Die Funktion der Taste ist angeschlossen an:

- (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);
}

Der Schlüssel hier ist die Funktion indexPathForRowAtPoint. Dies ist eine nette Funktion in UITableView, dass Sie die indexPath an irgendeiner Stelle geben. Wichtig ist auch die Funktion locationInView, weil Sie die Note in Zusammenhang mit der Tableview müssen, damit es die spezifischen indexPath genau bestimmen können.

Dies ermöglicht es Ihnen, welche Taste es war, in einer Tabelle mit mehreren Abschnitten zu kennen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top