2009-10-02 1 views

Antwort

2

Das ist nicht möglich. Sie haben eine Methode Conforming zu IBAction

- (IBAction)buttonXYClicked:(id)sender; 

Bei dieser Methode erstellen Sie erstellen können und die UIAlertView nennen. Vergessen Sie nicht, die Schaltfläche mit der Methode in Interface Builder zu verbinden.

Wenn Sie zwischen mehreren Schaltflächen unterscheiden möchten (z. B. Sie haben einen in jeder Tabellenzelle), können Sie die Tag-Eigenschaft der Schaltfläche festlegen. Und dann überprüfe sender.tag, von welcher Schaltfläche der Klick kommt.

+0

Sie müssen IBAction nicht verwenden. Siehe andere Antworten. –

9

Wenn Sie Button in Tableviewcell verwenden, müssen Sie den einzelnen Zellen einen Tag-Wert hinzufügen und die Methode addTarget mit id als Parameter festlegen.

Beispielcode:

Sie haben in cellForRowAtIndexPath Methode Unten Code einzugeben.

{ 

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

Ausgezeichnet !!, schönes Casting !, diese Antwort ist sehr informativ !, danke! – MaKo

1

Jay Antwort ist groß, aber wenn Sie mehrere Abschnitte wird es nicht funktionieren, da die indexRow local to a section ist.

Eine andere Methode besteht darin, Touch-Ereignisse zu übergeben, wenn Sie in einem TableView mehrere Schaltflächen verwenden.

Wo Sie Ihre Schaltfläche in einem faulen loader erklären:

- (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 Ihre Veranstaltungen auf der Auswahlmethode Kette. Sie können keine eigenen Parameter übergeben, aber Sie können die Ereignisse übergeben.

Die Funktion ist die Taste, um süchtig:

- (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, die Ihnen den IndexPath an jedem Punkt geben wird. Wichtig ist auch die Funktion locationInView, da Sie die Berührung im Kontext von tableView benötigen, um den spezifischen indexPath genau zu lokalisieren.

Damit können Sie in einer Tabelle mit mehreren Abschnitten wissen, welcher Knopf es war.

Verwandte Themen