У меня есть табличное представление со списком пользователей. Выбрав одного из пользователей, я могу загрузить их профиль пользователя в другом контроллере, включая их личную информацию. Работа по назначению.Swift: Инициализация данных и отправка их другому контроллеру
У меня также есть жестом, который позволяет администраторам редактировать или удалять этих пользователей. В настоящее время я пытаюсь отправить данные пользователя в контроллер «Редактировать пользователя», нажав кнопку «Изменить». Swift дает мне следующую ошибку: Constant «студенту» захваченное закрытием перед тем, как инициализируются
SEGUE к моему пользователю контроллеру
class Student: NSObject {
var profileImage: String
var firstName: String
init(profileImage: String, firstName: String) {
self.profileImage = profileImage
self.firstName = firstName
}
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let student: Student
showUserprofileDetail(student: student)
}
func showUserprofileDetail(student: Student) {
let detailViewController = UserProfileController()
detailViewController.student = student
present(detailViewController, animated: true, completion: nil)
}
Профиля В моем пользователе контроллера профили загружает данные с помощью:
var student: Student? {
didSet {
if let profileImage = student?.profileImage {
profileImageView.image = UIImage(named: profileImage)
}
if let firstName = student?.firstName {
nameLabelView.text = firstName
}
}
Под функцией салфетки для редактирования пользователей.
override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
// Edit student
let student: Student
let edit = UITableViewRowAction(style: .normal, title: "Edit") { action, index in
tableView.isEditing = true
self.editUserProfileDetail(student: student)
}
edit.backgroundColor = UIColor.lightGray
return [edit]
}
func editUserProfileDetail(student: Student) {
let detailViewController = EditStudentController()
detailViewController.student = student
self.present(detailViewController, animated: true, completion: nil)
}
Новая проблема: Все данные корректно толкают на новый контроллер, но только изображение профиля видна. Я также хочу, чтобы данные были перенесены во все мои текстовые поля. Мое текстовое поле - это пользовательские классы в виде таблицы. Как получить доступ к этим текстовым полям?
let editStudentTableViewController = EditStudentInfoController()
var student: Student? {
didSet {
if let profileImage = student?.profileImage {
profileImageView.image = UIImage(named: profileImage)
}
if let firstName = student?.firstName {
editStudentTableViewController.editStudentFirstNameTextField?.text? = firstName
}
}
}
lazy var profileImageView: UIImageView = {
let imageView = UIImageView()
imageView.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
imageView.image = UIImage(named: "profile_default")
imageView.isUserInteractionEnabled = true
imageView.layer.masksToBounds = false
imageView.layer.cornerRadius = imageView.frame.height/2
imageView.clipsToBounds = true
imageView.translatesAutoresizingMaskIntoConstraints = false
return imageView
}()
// MARK: Custom cells
class EditStudentFirstNameCell: UITableViewCell {
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: .subtitle, reuseIdentifier: reuseIdentifier)
setupViews()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
let editStudentFirstNameTextField: UITextField = {
let editStudentFirstNameTextField = UITextField()
editStudentFirstNameTextField.placeholder = "First Name"
editStudentFirstNameTextField.textColor = .red
editStudentFirstNameTextField.translatesAutoresizingMaskIntoConstraints = false
editStudentFirstNameTextField.rightViewMode = UITextFieldViewMode.always
editStudentFirstNameTextField.autocorrectionType = .no
return editStudentFirstNameTextField
}()
func setupViews() {
addSubview(editStudentFirstNameTextField)
editStudentFirstNameTextField.rightAnchor.constraint(equalTo: self.rightAnchor, constant: 10).isActive = true
editStudentFirstNameTextField.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
editStudentFirstNameTextField.widthAnchor.constraint(equalToConstant: 200).isActive = true
editStudentFirstNameTextField.heightAnchor.constraint(equalToConstant: 48).isActive = true
}
}
Вы никогда не инициализирует объект Student. Где вы даете студенту свое имя и образ профиля? – Priyal