2016-05-03 13 views
1

ich dynamisch erstellt mehrere Schaltflächen in meiner UITableViewCell Klasse wie folgt:So rufen Sie eine Schaltfläche zum Hinzufügen einer Zielschaltfläche in einer UITableViewCell von UITableView auf?

func asdf(sender:UIButton) { 
    print("Button tapped") 
} 

Ich denke an mit einem protocal das erhalten:

for (clientObjectId, _) in connectedObjectIds { 
    self.clientNameButton = UIButton(type: UIButtonType.System) as UIButton 
    self.clientNameButton.titleLabel?.lineBreakMode = NSLineBreakMode.ByTruncatingTail 
    self.clientNameButton.frame = CGRectMake(self.leftSideSpaceForUsersAndUserLabel, clientNameButtonFrameHeight, self.nameButtonWidth, self.nameButtonHeight) 
    self.clientNameButton.setTitle(self.userObjectIdsAndNames[clientObjectId], forState: UIControlState.Normal) 
    self.clientNameButton.titleLabel!.font = UIFont(name: "Helvetica", size: 12.0) 
    self.clientNameButton.addTarget(self, action: "asdf:", forControlEvents: UIControlEvents.TouchUpInside) 
    self.nameButtons.append(self.clientNameButton) 
    self.addSubview(self.clientNameButton) 
} 

ich die folgende Funktion in meine UITableView Klasse nennen wollen asdf() Funktionsaufruf von meiner UITableView-Klasse. Aber gibt es einen besseren Weg?

bearbeiten

Der Unterschied zwischen den möglichen Duplikate ist, dass die addTarget in einer UITableView Delegatfunktion in der UITableView Klasse auftritt. Allerdings habe ich nicht addTarget in der Delegat-Funktion, sondern in meinem UITableViewCell. Ich habe diesen Beitrag bereits gelesen und es hat mein Problem gelöst. Deshalb habe ich es hier mit einem anderen Beitrag gefragt.

Auch das andere mögliche Duplikat war meine Frage. Und ich habe diese Frage in diesem Post gestellt, aber ich habe in einem Post zwei Fragen gestellt, also habe ich beschlossen, diesen Post zu posten, damit ich nicht zwei Fragen in einem Post stelle.

+0

Mögliche Duplikat [iOS Swift Button-Aktion in der Tabellenansicht Zelle] (http: // Stackoverflow. com/questions/28894765/ios-swift-button-aktion-in-tabelle-ansicht-zelle) – Patrick

+0

Mögliche duplikat von http://stackoverflow.com/questions/37002308/calling-a-uibutton-action-from-a- uitableviewcell – Hasya

Antwort

1

diesen Code versuchen,

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"Cell Identifier"; 

    [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CellIdentifier]; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    cell.playButton.tag = indexPath.row 
    cell.playButton.addTarget(self, action: Selector("buttonPressed:"), forControlEvents: .TouchUpInside) 
    return cell; 

} 

Aktion:

func buttonPressed(sender:UIButton!) { 
     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let controller = storyboard.instantiateViewControllerWithIdentifier("ViewController") as! PlayViewController 
     self.navigationController?.pushViewController(controller, animated: true) 
    } 

sein hilfreich hoffen

+1

Ich schätze die Antwort, aber sie beantwortet meine Frage nicht, weil Sie das Ziel in der Delegate-Funktion hinzufügen. Für mich füge ich das Ziel in meiner UITableViewCell-Klasse hinzu. – aejhyun

+0

dieser Weg ist sehr einfach, wenn Sie Wert an andere Viewcontroller weitergeben, übergeben Sie den Wert, dann funktioniert es für mich –

+1

Und Sie erhalten auch die bestimmten 'indexpath.row' Wert in' sender.tag' von 'buttonPressed' Methode –

Verwandte Themen