Невозможно передать данные из UIPickerView в CustomTableViewCell - PullRequest
0 голосов
/ 13 апреля 2019

Я пытаюсь сделать что-то относительно простое, но я не могу обойти это.У меня есть контроллер просмотра регистра, в который встроен UITableView.В TableView есть CustomsCells, встроенные три вида пользовательских ячеекПоследний из них настраивается с помощью поля UIText, и при выборе предполагается, что PickerView запускает снизу, чтобы пользователь мог выбрать там форму по своему желанию.Все работает хорошо, кроме одной мелочи;когда в любой строке выделен текст, должен быть ввод текстового поля, но этого не происходит.

Я пробовал несколько фрагментов кода в Интернете, но большинство из них касается текстового поля, находящегося в одном и том же ViewController, так как в этом случае поле UITextFieldDelegate связано с классом de CustomTableViewCell.Я попытался создать объект этого CustomTableViewCell, а затем просто коснулся переменной текстового поля и попытался изменить свойство текста, но результат просто пуст.

import UIKit

class RegisterViewController: UIViewController {

    let registrationCell = RegisterViewCell()
    let personalCell = PersonalViewCell()
    var selectedRow : String = ""

    let registerArray = ["UserName"]
    let passwordArray = ["Password", "Confirm Password"]
    let personalArray = ["I am"] //Identity of the user, female or male
    let personalPickerArray = ["Famale", "Male"]
    @IBOutlet weak var registerTableView: UITableView!
    @IBOutlet weak var personalPickerView: UIPickerView!

    override func viewDidLoad() {
        super.viewDidLoad()

        personalPickerView.isHidden = true
        personalCell.personalTextField?.inputView = personalPickerView

    } 

Я создал расширения для TableView и PickerПосмотрите, где, я думаю, проблема здесь, но я не уверен:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let personalCell = tableView.dequeueReusableCell(withIdentifier: "PersonalViewCell", for: indexPath) as! PersonalViewCell
            personalCell.personalLabel?.text = personalArray[0]
            personalCell.personalTextField.text = selectedRow
            personalCell.accessoryType = .disclosureIndicator
            return personalCell
        }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        if indexPath.row == 3 {
            personalPickerView.isHidden = false
        }
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

        let row = personalPickerArray[row]
        selectedRow = row
        personalPickerView.isHidden = true
        print(selectedRow)
    }

Файл пользовательского класса ячеек

import UIKit

class PersonalViewCell: UITableViewCell {


    @IBOutlet weak var personalLabel: UILabel!
    @IBOutlet weak var personalTextField: UITextField!


    override func awakeFromNib() {
        super.awakeFromNib()
    }
}

Прямо сейчас, когда выбрана строка, я ожидаю получитьвход в UITextField, встроенный в пользовательскую ячейку «Персональная ячейка просмотра», но когда выбрана какая-либо строка, UITextField остается пустым

1 Ответ

0 голосов
/ 14 апреля 2019
class RegisterViewController: UIViewController {

    var selectedIndexPath:IndexPath?
    /* code for class  */


  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        var selectedIndexPath = indexPath //store index path
        if indexPath.row == 3 {
            personalPickerView.isHidden = false
        }
    }


 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

        let row = personalPickerArray[row]
        selectedRow = row
        personalPickerView.isHidden = true

       /* check if we have an index path, and if the cell is correct type */
        if let indexPath = selectedIndexPath {
            if let cell = tableView.cellForRow(at: indexPath) as? PersonalViewCell {
                   cell.textField.text = personalPickerArray[row]
             }
        }

        print(selectedRow)
    }

} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...