Oto binaryjne:

fieldstyle1.swift :

import UIKit

protocol FieldStyle1Delegate {
    func textChange(text: String, tag: NSInteger)
}

class FieldStyle1: UITableViewCell, UITextFieldDelegate {

    var delegate: FieldStyle1Delegate?
    @IBOutlet var fullnameField: UITextField!
    @IBOutlet var usernameField: UITextField!
    @IBOutlet var emailField: UITextField!
    @IBOutlet var passwordField: UITextField!
    @IBOutlet var confirmPasswordField: UITextField!

    override func awakeFromNib() {

        fullnameField.delegate = self
        usernameField.delegate = self
        emailField.delegate = self
        passwordField.delegate = self
        confirmPasswordField.delegate = self

        fullnameField.tag = 0
        usernameField.tag = 1
        emailField.tag = 2
        passwordField.tag = 3
        confirmPasswordField.tag = 4

    }

    func textFieldDidEndEditing(_ textField: UITextField) {
        delegate?.textChange(text: textField.text!, tag: textField.tag)

    }

}

Muszę wyciągnąć @IBOutlet var passwordField: UITextField! i @IBOutlet var fullnameField: UITextField! z FieldStyle1.swift, do ViewController.swift Utwórz funkcję użytkownika, gdzie

user.username = usernameField.text, ale otrzymuję błąd "Użycie nierozwiązanego identyfikatora" Usernamafield ".

Wypróbowałem wiele metod znalezionych na stackoverflow, ale wszystkie nie powiodło się. Proszę pomóż!

0
Victor Angel Cruz 2 czerwiec 2018, 12:16

3 odpowiedzi

Najlepsza odpowiedź

Nie możesz uzyskać dostępu bezpośrednio z textFields z komórki tabeli, więc musisz wdrożyć protokoły, które wdrożone:

Przede wszystkim musisz podać Fielstle1Delegate z regulatora do komórki tabeli, jak w ten sposób:

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let cell = tableView.dequeueReusableCell(withIdentifier:"identifier") as? FieldStyle1 else {
            fatalError("Nil")
        }
        cell.delegate = self
        return cell
    }

Następnie musisz obsługiwać go w przeglądarce i uzyskać dane z komórki tabeli:

class ViewController: UIViewController, FieldStyle1Delegate {

func textChange(text: String, tag: NSInteger) {
     if tag == 0 {
        user.fullname = text
     } else if tag == 1 {
        user.username = text
     } else if tag == 2 {
       user.email = text
     } else if tag == 3 {
       user.password = text
     }
  }

}
0
Jogendar Choudhary 2 czerwiec 2018, 09:46

1) Podczas konfigurowania komórki należy przypisać obiekt, który jest zgodny z delegatem FieldStyle1Delegate. Jeśli konfigurujesz komórkę podczas przeglądania kontrolera, możesz przypisać self:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = ...
    cell.delegate = self
    return cell
}

2) Musisz być zgodny z tym delegatem:

class ViewController: FieldStyle1Delegate, UITableViewDataSource {

    func textChange(text: String, tag: NSInteger) {
        // now you have those values
    }

}

Pełny przykład:

class ViewController: FieldStyle1Delegate, UITableViewDataSource {

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return ...
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = ...
        cell.delegate = self
        return cell
    }

    func textChange(text: String, tag: NSInteger) {
        // now you have those values
    }

}
0
krlbsk 2 czerwiec 2018, 09:28

Trzymaj odniesienie klasy Fieldstyle1 w ViewController.Swift

Class ViewController: UIViewController {
 var xibView:  FieldStyle1?

 func loadNib() {
   self.xibView = //..load nib
}

func accessOutlets() {
  User.name = xibView?.textField.text 
}

}
0
SuryaKantSharma 2 czerwiec 2018, 13:05