Разница между setAlpha и setImageAlpha

Мой подход к этой проблеме заключается в использовании протокола делегата между ячейкой и табличным представлением. Это позволяет вам удерживать обработчик кнопки в подклассе ячейки, что позволяет назначить обработчик действия касания к ячейке прототипа в Interface Builder, сохраняя при этом логику обработчика кнопок в контроллере представления.

Он также избегает потенциально хрупкого подхода к навигации по иерархии представлений или использованию свойства tag, у которого возникают проблемы при изменении индексов ячеек (в результате вставки, удаления или переупорядочения)

CellSubclass.swift

protocol CellSubclassDelegate: class {
    func buttonTapped(cell: CellSubclass)
}

class CellSubclass: UITableViewCell {

@IBOutlet var someButton: UIButton!

var delegate: CellSubclassDelegate?

override func prepareForReuse() {
    super.prepareForReuse()
    self.delegate = nil
}

@IBAction func someButtonTapped(sender: UIButton) {
    self.delegate?.buttonTapped(self)
}

ViewController.swift

class MyViewController: UIViewController, CellSubclassDelegate {

    @IBOutlet var tableview: UITableView!

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! CellSubclass

        cell.delegate = self

        // Other cell setup

    } 

    //  MARK: CellSubclassDelegate

    func buttonTapped(cell: CellSubclass) {
        guard let indexPath = self.tableView.indexPathForCell(cell) else {
            // Note, this shouldn't happen - how did the user tap on a button that wasn't on screen?
            return
        }

        //  Do whatever you need to do with the indexPath

        print("Button tapped on row \(indexPath.row)")
    }
} 
29
задан kolistivra 17 February 2014 в 14:35
поделиться