ios - 在 segueing 之前按下另一个 TableViewCell 中的按钮时,在 TableViewCell 中捕获 TextView 值?

标签 ios swift uitextview

我有以下表格 View :

enter image description here

当用户点击蓝色的 Pay Cash/Card 按钮时,他们会转到另一个 tableView。

我遇到的问题是;当用户单击按钮时,不会在委托(delegate)方法中捕获 textView 的值。例如,我实现了“TextView”协议(protocol)并从 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
    }
}

如您所见,如果我输入一些文本,然后在单击 segue 按钮之前单击“完成”按钮,我就能够成功传递该值。但是,如果用户在单击完成之前单击了蓝色的 segue 按钮,它将继续,我不确定如何捕获 textView 的值。我的按钮委托(delegate)的代码如下,我还传递了我的 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)
    }
}

最佳答案

可以在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 变量总是随着每次按键的变化而更新。

希望这对您有所帮助。

关于ios - 在 segueing 之前按下另一个 TableViewCell 中的按钮时,在 TableViewCell 中捕获 TextView 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51962694/

相关文章:

ios - 字符串不是 () 的子类型

ios - 使用 AlamofireImage 调整下载图像的大小

ios - 获取 UITextView 上特定行的文本

ios - UITextView 在插入文本之前返回不准确的原点

ios - 如何进行 UI 测试 UITextField 或 UITextView 的 autocapitalizationType 属性是否设置正确?

ios - 当约束到包含多行 UILabel 的 UIStackview 时,UITableViewCell 高度不是动态的

objective-c - cellForRowAtIndexPath - [indexPath row] 滚动时返回奇怪的数字

iOS swift Xcode 6 : CGAffineTransformRotate with auto-layout anchorpoint

Swift 数组设置 : Showing Recent Messages Command failed due to signal: Segmentation fault: 11

ios - 由于授权,WKWebview 无法加载 Assets 文件