2014-09-01 7 views
6

Ho creato una cella personalizzata per un listView in Swift. Ha due pulsanti su di esso - uno un pulsante 'pausa' e uno un pulsante 'stop'. L'idea è che ogni elemento pubblicitario rappresenti un download in modo che l'utente possa fermarsi e avviarlo in modo indipendente.Identificazione del pulsante premuto in una cella listlist personalizzata in Swift

Tuttavia, ho bisogno di creare un @IBAction per ciascuno dei pulsanti. Li ho creati nel ViewController principale e abbastanza sicuro, quando sono collegati, si attivano.

Il bit su cui sono bloccato identifica un identificatore di quale pulsante della riga è stato premuto. Sto assumendo che qualcosa che riguarda il cellForRowAtIndexPath potrebbe funzionare.

ho trovato il seguente codice (che ho trovato da una domanda analoga riguardante i campi di testo):

@IBAction func startOrPauseDownloadSingleFile(sender: UIButton!) { 
    let pointInTable: CGPoint = sender.convertPoint(sender.bounds.origin, toView: self.tableView) 
    let cellIndexPath = self.tableView.indexPathForRowAtPoint(pointInTable) 
} 

Tuttavia continuo a ricevere l'errore 'non può invocare 'convertPoint' con una lista di argomenti di tipo (@lvalue CGPoint, toView: $ T6) '.

Qualcuno può aiutare?

Grazie,

risposta

4

ho preso il codice e incorporati in un semplice progetto.

In Interface Builder, ho creato una scena UITableViewController e impostare questa categoria per "ViewController". Ho aggiunto ad esso un UITableViewCell, impostato il suo identificatore su "Cell", impostare il suo stile su "Custom" e la sua classe su "CustomCell". Ho quindi aggiunto un UIButton nel contentView della cella e impostato un vincolo di layout automatico non ambiguo.

In Project Navigator, ho creato un nuovo file chiamato "ViewController" e ha aggiunto il seguente codice in esso:

import UIKit 

class CustomCell: UITableViewCell { 

    @IBOutlet weak var button: UIButton! 

    required init(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 

    override init(style: UITableViewCellStyle, reuseIdentifier: String!) { 
     super.init(style: style, reuseIdentifier: reuseIdentifier) 
    } 

    override func awakeFromNib() { 
     super.awakeFromNib() 
    } 

    override func setSelected(selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 
    } 

} 

class ViewController: UITableViewController { 

    func buttonPressed(sender: AnyObject) { 
     let pointInTable: CGPoint = sender.convertPoint(sender.bounds.origin, toView: self.tableView) 
     let cellIndexPath = self.tableView.indexPathForRowAtPoint(pointInTable) 
     println(cellIndexPath) 
    } 

    override func awakeFromNib() { 
     super.awakeFromNib() 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 10 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as CustomCell 
     cell.selectionStyle = .None 

     cell.button.addTarget(self, action: "buttonPressed:", forControlEvents: UIControlEvents.TouchUpInside) 

     return cell 
    } 

} 

finalmente ho linkato del pulsante IBOutlet alla UIButton in Interface Builder, corse il progetto ed è stato in grado di registrare i rispettivi IndexPath delle rispettive celle da ogni tocco di pulsante.

+1

Ho seguito il tuo schema e tutto era ok. Ma ho provato ad aggiungere più elementi dell'interfaccia utente all'interno di una singola cella e di nuovo ha funzionato, ma quando faccio scorrere e una cella esce dalla vista e quando ritorna sembra non ricordare i vincoli e ho tutto il pulsante a 0,0 coordinate della cella. Come risolverlo? – Nicholas

Problemi correlati