Я пытаюсь реализовать способ делегирования для выполнения некоторых действий при нажатии кнопки с моего UITableViewCell на ViewController. Ниже то, что я до сих пор -Button Действие от UITableViewCell to ViewController
TableViewCell:
protocol UserCellDelegate : class {
func disableUser(cell: UserCell, button: UIButton)
}
class UserCell : UITableViewCell {
@IBOutlet weak var userLabel: UILabel!
@IBOutlet weak var userDescription: UILabel!
@IBOutlet weak var writeOutUser: UIButton!
weak var delegate: UserCellDelegate?
override func awakeFromNib() {
super.awakeFromNib()
writeOutUser.layer.cornerRadius = 5.0
}
@IBAction func disableUserButtonAction(sender: UIButton) {
delegate?.disableUser(self, button: writeOutUser) //self here I believe to be the cell
}
}
ViewController:
class UserDetailTableViewController : UIViewController, UserCellDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let userCell = UserCell()
userCell.delegate = self
}
func disableUser(cell: UserCell, button: UIButton) {
print("VC: User Disabled")
}
}
проблема здесь есть функция disableUser в моем ViewController никогда не вызывается. Что я делаю не так?
Каков наилучший способ сделать это?
Я ссылался на SO Approved Answer Here, который является тем, за чем я следую тому же, но не повезло. Любая помощь будет оценена по достоинству. Благодаря!!
выглядит так, как ваш делегат равен нулю в vieDidLoad. Вы должны установить delagate в методе cellForRow –
Вы не можете инициализировать экземпляр 'UITableViewCell' с инициализатором по умолчанию'() '. Вы должны вызвать назначенный инициализатор 'init (style: reuseIdentifier:)'. В Swift удобнее использовать закрытие обратного вызова, а не шаблон делегата. – vadian
@TejaNandamuri: Это сделал трюк!Я упустил из виду тот факт, что это tableViewCell :-( –