Мне нужно получить значение от шагового двигателя, который сделан в прототипах. К сожалению, при попытке вернуться к отправителю он получает ошибку:
[stepperChanged:]: экземпляру отправлен нераспознанный селектор.
class SettingsSetsTableViewCell: UITableViewCell {
@IBOutlet weak var stepperSets: UIStepper!
}
class ViewControllerSettingsSets: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
@IBAction func stepperChanged(sender: UIStepper) {
//
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "StepSet", for: indexPath) as! SettingsSetsTableViewCell
}
Я изменился на:
cell.stepperSets.addTarget(self, action: #selector(stepperValueChanged(sender:)), for: .valueChanged)
@objc func stepperValueChanged(sender: UIStepper) {
let pointInTable = sender.convert(sender.bounds.origin, to: self.tableView)
let cellIndexPath = self.tableView.indexPathForRow(at: pointInTable)
}
Оно работает. Но является ли это правильным и безопасным способом получить переменную cellIndexPath и значение stepper?
Я отредактировал пост для объяснения. Спасибо.
Если нераспознанный селектор решен, вопрос закрыт.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
cell.stepperSets.tag = indexPath.row
cell.stepperSets.addTarget(self, action: #selector(stepperValueChanged), for: .valueChanged)
}
@objc func stepperValueChanged(step:UIStepper) {
print(step.tag) // step.tag value is an indexpath of your cell
}
Это означает, что @IBAction, который вы подключили в построителе интерфейса, имеет другую подпись, чем функция в вашем коде. Возможно, вы переименовали функцию
stepperChanged
в своем коде? Просто удалите старое подключение в ИБ и подключите вместо него новое.