2014-09-01 9 views
6

Utworzono komórkę niestandardową dla listy w Swift. Posiada dwa przyciski - jeden przycisk "pauza" i jeden przycisk "stop". Chodzi o to, że każdy element zamówienia reprezentuje pobranie, aby użytkownik mógł zatrzymać i uruchomić każdy niezależnie.Określanie, który przycisk został naciśnięty w niestandardowej liście Wyświetl komórkę w Swift

Muszę jednak utworzyć @IBAction dla każdego z przycisków. Stworzyłem je w głównym ViewController i na pewno wystarczy, gdy są podłączone, uruchamiają odpowiednie.

Bit, na którym utknąłem, identyfikuje identyfikator przycisku, który został naciśnięty. Zakładam, że zadziała coś związane z funkcją cellForRowAtIndexPath.

Znalazłem następujący kod (który znalazłem z podobnym pytaniem dotyczącym pól tekstowych):

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

Jednak wciąż otrzymuję błąd „nie może powoływać się na«convertPoint»z listy argumentów typu (@lvalue CGPoint, toView: $ T6) ".

Czy ktoś może pomóc?

Dzięki,

Odpowiedz

4

Wziąłem swój kod i zatopiono go w prosty projekt.

interfejs Builder, stworzyłem UITableViewController scenę i ustawić jego klasę "ViewController". Dodałem do niej numer UITableViewCell, ustawię jego identyfikator na "Komórka", ustawię jego styl na "Niestandardowy", a jego klasę na "Komórkę niestandardową". Następnie dodałem UIButton do contentView w komórce i ustaw dla niego niejednoznaczne ograniczenie automatycznego układu.

W Nawigatora projektu, stworzyłem nowy plik o nazwie „ViewController” i dodaje się następujący kod w nim:

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 
    } 

} 

końcu umieszczonego przycisku na IBOutlet do UIButton interfejs Builder, prowadził projekt i był w stanie rejestrować indeksy odnośnej komórki z każdego dotknięcia przycisku.

+1

Podążyłem za twoim planem i wszystko było w porządku. Ale próbowałem dodać więcej elementów interfejsu w pojedynczej komórce i znowu zadziałało, ale kiedy przewijam i jedna komórka wychodzi z widoku, a kiedy wraca, wydaje się, że nie pamiętam ograniczeń i mam cały przycisk na współrzędnych 0,0 komórki. Jak to naprawić? – Nicholas

Powiązane problemy