2017-02-07 11 views
0

У меня есть пользовательский UIView с 3 табличными представлениями, представления таблиц являются самостоятельными размерами в зависимости от содержимого, которое у них есть, и они показывают другой нить, когда они пусты, чем когда они имеют содержание. Все это встроено в представление прокрутки, и оно уже работает, мои свитки просмотра и таблицы отображаются соответствующим образом, и они автоматически настраиваются, размер прокрутки также настраивается без проблем.Делегат, используемый для управления кнопкой внутри ячейки, не работает

В двух табличных представлениях, когда элементы таблицы имеют элементы, есть некоторые кнопки в ячейке, которые я хочу получить вместе с индексом ячейки, нажатой внутри контроллера View, где я определил представление таблицы.

enter image description here

Вот в ПОС я показывающий tableViews каждый с одним пунктом, то Canastas Tableview имеет только кнопку удаления элемента и Productos Tableview имеет кнопку удаления элемента и степпер, чтобы увеличить или уменьшить количество.

Я нашел решение с участием делегатов в StackOverflow Get button click inside UI table view cell, которое я реализовал. Но по какой-то причине он не работает, а код в методе делегата не выполняется.

Вот мой код:

CanastasViewCell

import UIKit 

protocol CanastasViewCellDelegate: class { 
    func closeButtonTapped(at index: IndexPath) 
} 

class CanastasViewCell: UITableViewCell { 

@IBOutlet weak var imagenProducto: UIImageView! 

@IBOutlet weak var nombreProducto: UILabel! 
@IBOutlet weak var descProducto: UILabel! 
@IBOutlet weak var precioProducto: UILabel! 

@IBOutlet weak var closeButton: UIButton! 

weak var delegate: CanastasViewCellDelegate? 

var indexPath: IndexPath! 

override func awakeFromNib() { 
    super.awakeFromNib() 

} 

@IBAction func eliminarProducto(_ sender: AnyObject) { 
     self.delegate?.closeButtonTapped(at: indexPath) 
    } 

} 

CarritoViewController

import UIKit 

class CarritoViewController: UIViewController, UITableViewDelegate, 
UITableViewDataSource, CanastasViewCellDelegate { 

func closeButtonTapped(at index: IndexPath) { 
    print("Button tapped at index:\(index)") 
} 
+0

У меня есть проблема с пониманием вашего кода, поскольку он не на английском языке. Что означает 'eliminarProducto'? – paper1111

+0

eliminarProducto означает deleteProduct, и он должен удалить продукт из indexPath.row (я до сих пор не закодировал эту часть), поэтому прямо сейчас он должен просто распечатать Button, нажав на индекс: (indexPath.row), но он не распечатывается что-нибудь. –

+0

Проверьте, правильно ли вы подключили кнопку к '@ IBAction' – paper1111

ответ

1

Похоже, вы не устанавливается делегат внутри CarritoViewController. Вы хотите убедиться, что вы установили cell.delegate = self внутри func tableView(UITableView, cellForRowAt: IndexPath).

+0

Кажется, что вы правы, потому что теперь я получил это сообщение об ошибке при нажатии кнопки: 'фатальная ошибка: неожиданно найден nil при разворачивании необязательного значения Так что, я думаю, функция читается сейчас, и мне нужно рисовать почему он ноль. –

+1

Вы устанавливаете 'indexPath' где угодно? Рассматривая код, который вы поделили, похоже, вы создали его как неявно развернутый необязательный, но никогда не придавали ему значения. Поэтому при вызове метода делегата он все равно равен нулю. – swillsea

+0

@swillsea Я скопировал код из этого сообщения: http://stackoverflow.com/questions/20655060/get-button-click-inside-ui-table-view-cell кажется, что indexPath не установлен, потому что, Я попытался установить его на [], и теперь я больше не получаю ошибку, как и где я могу установить indexPath, чтобы я мог знать и хранить индексную строку строки при каждом нажатии? –