TextField возвращает ноль - PullRequest
0 голосов
/ 10 мая 2018

У меня есть пользовательский UITextField в UICollectionView, textfield всегда возвращает ноль, даже если я передаю какое-то значение из него, и приложение вылетает при нажатии кнопки

Код:

func accountCollectionView(_ collectionView: UICollectionView?, cellForItemAt indexPath: IndexPath?) -> UICollectionViewCell?
  {
  let cell : RBLoginCell = collectionView!.dequeueReusableCell(withReuseIdentifier: "RBLoginCell", for: indexPath!) as! RBLoginCell


    cell.backgroundColor = UIColor.clear

    switch indexPath!.row {
    case 0:
        let txtFldUserId = cell.txtFld
        txtFldUserId?.delegate = self
         txtFldUserId?.placeholder = "Email Address"
         txtFldUserId?.tag = 1
         txtFldUserId?.keyboardType = .emailAddress
         txtFldUserId?.returnKeyType = .next
         txtFldUserId?.isSecureTextEntry = false

        break
    case 1:
        let  txtFldPassword = cell.txtFld
         txtFldPassword?.delegate = self
         txtFldPassword?.placeholder = "Password"
         txtFldPassword?.tag = 2
         txtFldPassword?.returnKeyType = .done
         txtFldPassword?.isSecureTextEntry = true

        break
    default:
        break
    }
    cell.setNeedsLayout()
    return cell
}

при этом методе происходит сбой приложения при проверке счетчика символов

    func loginAction(sender:UIButton!)
   {

    if (txtFldUserId?.text?.characters.count)! > 0 {
        if (txtFldPassword?.text?.characters.count)! > 0 {
            user?.emailAddress =  txtFldUserId?.text
            user?.password =  txtFldPassword?.text
            postLoginRequest(user)

Пользовательский класс ячейки

class RBLoginCell  : RBParentCell {
    var txtFld : CustomTextField?
    var separator : UIView?


    override init(frame: CGRect) {
    super.init(frame: frame)
    txtFld = getTextField()
    separator = getImageView()


    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override func getLabel() -> UILabel? {
        let _lblInfo = UILabel(frame: CGRect.zero)
        _lblInfo.backgroundColor = UIColor.clear
        _lblInfo.textAlignment = .left
        _lblInfo.textColor = UIColor.white
        _lblInfo.numberOfLines = 0
        addSubview(_lblInfo)
        return _lblInfo
    }

    func getTextField(_ frame: CGRect) -> CustomTextField? {
        let textField = CustomTextField(frame: frame)
        textField.borderStyle = .none
        textField.placeholder = ""
        textField.backgroundColor = UIColor.clear
        textField.autocorrectionType = .no
        // no auto correction support
        textField.keyboardType = .default
        // use the default type input method (entire keyboard)
        textField.returnKeyType = .next
        textField.enablesReturnKeyAutomatically = false
        textField.clearButtonMode = .never
        textField.text = ""
        textField.contentVerticalAlignment = .center
        textField.autocapitalizationType = .none
        //textField.frame                     = CGRectMake(X, Y,Width,Height);
        textField.alpha = 1.0
        textField.isUserInteractionEnabled = true
        let lblleft: UILabel? = getLabel()
        lblleft?.frame = CGRect(x: 0, y: 20, width: self.frame.size.width, height: self.frame.size.height)
        lblleft?.backgroundColor = UIColor.clear
        lblleft?.text = "\n+91"
        lblleft?.font = UIFont(name: Constants.HelveticaNeue, size: 14)//FONT_HelveticaNeue(14.0)
        lblleft?.textColor = UIColor(hexString: "555555")
        textField.leftView = lblleft
        textField.leftViewMode = .never

        addSubview(textField)
        return textField
    }

    override func getImageView() -> UIImageView? {
        let imageView = UIImageView(frame: CGRect.zero)
        imageView.backgroundColor = UIColor.lightGray
        addSubview(imageView)
        return imageView
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        txtFld?.frame = CGRect(x: 0, y: 0, width: self.frame.size.width, height: self.frame.size.height-1)

        separator?.frame = CGRect(x: 0, y: (txtFld?.frame.size.height)!, width: frame.size.width, height: 1)
    }

1 Ответ

0 голосов
/ 10 мая 2018

Вы инициализировали

let txtFldUserId = cell.txtFld

и

let txtFldPassword = cell.txtFld

в вашем cellForItemAt методе, как вы можете получить к нему доступ в методе loginAction?

Если вы инициализировали txtFldUserId и txtFldPassword в вашем контроллере представления, то удалите let из метода cellForItemAt, например

txtFldUserId = cell.txtFld
txtFldPassword = cell.txtFld

[Я предполагаю, что вы инициализировали в вашем viewController

var txtFldUserId: UITextField?
var txtFldPassword: UITextField?

потому что вы не получаете ошибку компилятора в вашем методе loginAction]

...