#ios #swift #uitableview
#iOS #swift #uitableview
Вопрос:
Я пытаюсь создать пользовательскую UITableViewCell с помощью пользовательского интерфейса и без использования файла storyboard / .xib. Проблема в том, что действие, которое я установил на UISwitch, похоже, потеряно, потому что я не могу вызвать действие селектора при нажатии переключателя. Тогда как addTarget устанавливается после инициализации ячейки. Также нажатие на переключатель не переключает состояние (нет проблем с использованием файла XIB, поэтому проблема не должна исходить от UITableViewController)
class UISwitchTableViewCell: UITableViewCell {
let switchUI : UISwitch = {
let switchUI = UISwitch()
return switchUI
}()
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.selectionStyle = .none
addSubview(switchUI)
switchUI.translatesAutoresizingMaskIntoConstraints = false
switchUI.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
switchUI.trailingAnchor.constraint(equalTo: layoutMarginsGuide.trailingAnchor).isActive = true
switchUI.addTarget(self, action: #selector(switchChanged), for: .valueChanged)
}
@objc func switchChanged(_ sender: UISwitch){
print("switch changed")
}
required init?(coder: NSCoder) {
fatalError("NSCoder init not implemented")
}
}
Ответ №1:
Убедитесь, что вы разрешили выбор UITableView и UITableViewCell
tableView.allowsSelection = true
cell.selectionStyle = .default
Комментарии:
1. selectionStyle — это всего лишь свойство стиля, не влияющее на взаимодействия. И allowsSelection по умолчанию имеет значение true
2. Я спросил стиль выбора, чтобы подтвердить, есть ли какое-либо другое представление, которое перекрывается с представлением содержимого ячейки. Это точно такой же случай, как вы упомянули в своем ответе. Я попросил установить значение разрешить выбор true, потому что иногда по ошибке / другому разработчику устанавливается значение false.
Ответ №2:
Проблема заключалась не в том, что цель была освобождена или что-то подобное. Проблема была вызвана текстовой меткой ячейки по умолчанию (ниже задана желтым фоном), которая перекрывала пользовательский переключатель, предотвращая взаимодействие с касанием. Итак, решение состояло в том, чтобы скрыть эту метку по умолчанию и создать мою собственную с конечным ограничением, равным UISwitch leadingAnchor .
Комментарии:
1. Кроме того, переключатель должен быть внутри
contentView
, иначе рано или поздно произойдут плохие вещи.2. Не задавайте вопросов в своих решениях. Мы не хотим начинать обсуждения на этом сайте