首页 > 解决方案 > 捕获 TableViewCell 中的 TextView 值,当在 segueing 之前按下另一个 TableViewCell 中的按钮时?

问题描述

我有以下表格视图:

在此处输入图像描述

当用户单击蓝色的支付现金/卡按钮时,他们会转到另一个 tableView。

我的问题是;当用户单击按钮时,textView 的值不会在委托方法中被捕获。例如,我已经实现了“TextView”协议并从 TextView 类中实现了以下功能:

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    if(text == "\n") {
        textView.resignFirstResponder()
        return false
    }
    return true
}

func textViewDidBeginEditing(_ textView: UITextView) {
    if textView.textColor == UIColor.lightGray {
        textView.text = nil
        textView.textColor = UIColor.black
    }
}

func textViewDidEndEditing(_ textView: UITextView) {
    if textView.text.isEmpty {
        textView.text = "Enter a note for the takeaway (optional)"
        textView.textColor = UIColor.lightGray
    } else {
        self.note = textView.text
    }
}

如您所见,如果我输入一些文本,然后单击 Done 按钮,在单击 segue 按钮之前,我能够成功传递值。但是,如果用户在单击完成之前单击蓝色 segue 按钮,它会继续,我不确定如何捕获 textView 的值。我的按钮委托的代码如下,我还通过了 prepareForSegue 方法。

我希望我想要实现的目标是有意义的;我确实很难解释事情,所以如果我不清楚,请告诉我,我会尝试进一步扩展。

谢谢,J

func buttonPressed() {
    performSegue(withIdentifier: "showNameAddress", sender: nil)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if(segue.identifier == "showNameAddress") {
        let nameAddressTableViewController = segue.destination as! NameAddressTableViewController
        if(self.delivery == true) {
            nameAddressTableViewController.delivery = true
            nameAddressTableViewController.finalPrice = self.basket.totalPriceOfAllItems() + Double(BasketArrays.deliveryCharge)!
        } else {
            nameAddressTableViewController.delivery = false
            nameAddressTableViewController.finalPrice = self.basket.totalPriceOfAllItems()
        }
        nameAddressTableViewController.note = self.note
        nameAddressTableViewController.show(self, sender: nil)
    }
}

标签: iosswiftuitextview

解决方案


您可以在 中捕获字符串的值func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool

我没有测试过这段代码,但它看起来像:

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, 
replacementText text: String) -> Bool {
    if(text == "\n") {
        textView.resignFirstResponder()
        return false
    }
    self.note = textView.text + text
    return true
}

这样,您的self.note变量始终与每次按键的更改保持同步。

希望这可以帮助。


推荐阅读