首页 > 解决方案 > UIView textFieldShouldReturn 不起作用

问题描述

据我所知,我在功能方面遇到了一些问题,textFieldShouldReturn当在键盘上按下回车键时应该调用它,但事实并非如此。我试图在谷歌和这里搜索解决方案,但没有找到解决问题的答案,因为我有基金的网页上的大多数答案都是 3 岁或以上,而这些解决方案并没有太大帮助。

我在函数中设置UIView了委托的地方使用它,并且我尝试了其他一些可以工作的委托函数,所以我不知道为什么它不工作。textFieldawakeFromNib()textViewDidChangeSelection

这是 xib 文件的外观

在此处输入图像描述

这是我用作弹出窗口的代码:

import UIKit

class CuePointPopup: UIView,UITextFieldDelegate,UITextViewDelegate
{
    @IBOutlet var labelCueNumberInImage: UILabel!
    @IBOutlet var labelCueNumber: UILabel!
    @IBOutlet var labelLayerName: UILabel!
    @IBOutlet var labelPageNumber: UILabel!
    @IBOutlet weak var view: UIImageView!

    @IBOutlet var textFieldWhoText: UITextField!
    @IBOutlet var textViewWhatText: UITextView!
    @IBOutlet var textFieldWhereText: UITextField!
    @IBOutlet var textFieldPageNumber: UITextField!
    @IBOutlet var textFieldCueText: UITextField!

    @IBOutlet var boxArrowLeft: UIImageView!
    @IBOutlet var boxArrowRight: UIImageView!

    @IBOutlet var boxArrowLeftTopConstraint: NSLayoutConstraint!

    @IBOutlet var boxArrowRightTopConstraint: NSLayoutConstraint!
    var cuePointObj:CuePoint!

    var blockBtnClickedSave:((CuePoint) -> ())!
    var blockBtnClickedCancel:((CuePoint) -> ())!
    var blockBtnClickedDelete:((CuePoint) -> ())!
    var blockTextChangedForPageNumber:((String, CuePoint) -> ())!

    @IBOutlet var btnOutletVisibleOnPage: UIButton!
    var isVisible = false

    class func loadNib() -> CuePointPopup
    {
        return Bundle.main.loadNibNamed("CuePointPopup", owner: self,options: nil)!.last as! CuePointPopup
    }

    override func awakeFromNib() {

        self.textFieldWhoText.delegate = self
        self.textViewWhatText.delegate = self
        self.textFieldWhereText.delegate = self
        self.textFieldCueText.delegate = self
        textViewWhatText.text = "Hello"
    }

    func setViewData(cueModel:CuePoint) {
        self.cuePointObj = cueModel

        labelCueNumberInImage.text = cueModel.cueNumber
        labelCueNumber.text = "Cue #:" + cueModel.cueNumber
        labelLayerName.text = "Layer #:" + cueModel.layerName
        labelPageNumber.text = "Page #:" + cueModel.pageNumber
        textFieldPageNumber.text = cueModel.pageNumber

        textFieldWhoText.text = cueModel.whoString
        textViewWhatText.text = cueModel.whatString
        textFieldWhereText.text = cueModel.whereString
        textFieldCueText.text = cueModel.cueTextString

        if cueModel.isVisibleOnPage == true {
            btnOutletVisibleOnPage.setImage(UIImage(named: "SelectedBox"), for: [])
            btnOutletVisibleOnPage.tag = 1
        }else{
            btnOutletVisibleOnPage.setImage(UIImage(named: "UnselectedBox"), for: [])
            btnOutletVisibleOnPage.tag = 0
        }

    }

    func textFieldDidEndEditing(_ textField: UITextField) {

        if textField.text != "" {
            if blockTextChangedForPageNumber != nil {
                self.blockTextChangedForPageNumber(textField.text!, self.cuePointObj)
            }
        }
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        //self.view.endEditing(true)
        if self.textFieldWhoText.isEditing {
            self.textFieldWhoText.endEditing(true)
        } else if self.textFieldCueText.isEditing{
            self.textFieldCueText.endEditing(true)
        } else if self.textFieldWhereText.isEditing {
            self.textFieldWhereText.endEditing(true)
        } else {
            self.textViewWhatText.endEditing(true)
        }
        //self.view.endEditing(true)
        return false
    }  
}

这是我加载XIB的方式

@IBOutlet weak var bookView: UIView!
var objCuePopup:CuePointPopup!


if objCuePopup != nil {
    objCuePopup.removeFromSuperview()
}

objCuePopup = CuePointPopup.loadNib()
objCuePopup = CuePointPopup.loadNib()
objCuePopup.frame = CGRect(x:cuePointModal.cueX, y:0, width:465, height:410)
objCuePopup.center = CGPoint(x:objCuePopup.center.x, y:cuePointModal.cueY + 5)

//Set Y value for Popup View
if objCuePopup.frame.origin.y < bookView.frame.origin.y {
    objCuePopup.frame.origin.y = bookView.frame.origin.y
}

let popupMaxY = objCuePopup.frame.maxY
let bookViewMaxY = bookView.frame.maxY

if popupMaxY > bookViewMaxY {
    objCuePopup.frame.origin.y = bookViewMaxY - objCuePopup.frame.size.height
}

//Set X value for Popup View

if cuePointModal.cueX > 455 {
    objCuePopup.frame.origin.x =  cuePointModal.cueX - 455
    objCuePopup.boxArrowLeft.isHidden = true
    objCuePopup.boxArrowRight.isHidden = false

    let rightY = cuePointModal.cueY - objCuePopup.frame.origin.y
    objCuePopup.boxArrowRightTopConstraint.constant = rightY + 3

}else{

    objCuePopup.frame.origin.x = cuePointModal.cueX + 40
    objCuePopup.boxArrowLeft.isHidden = false
    objCuePopup.boxArrowRight.isHidden = true

    let leftY = cuePointModal.cueY - objCuePopup.frame.origin.y
    objCuePopup.boxArrowLeftTopConstraint.constant = leftY + 3
}

objCuePopup.setViewData(cueModel: cuePointModal)
objCuePopup.textFieldWhoText.delegate = self
objCuePopup.textFieldWhereText.delegate = self
objCuePopup.textViewWhatText.delegate = self
objCuePopup.textFieldCueText.delegate = self

bookView.addSubview(objCuePopup)

我希望这里有人可以帮助我解决这个问题。

标签: iosuiviewuitextfielduitextfielddelegate

解决方案


推荐阅读