在 segueing 之前按下另一个 TableViewCell 中的按钮时,在 TableViewCell 中捕获 TextView 值?
Capturing a TextView value within a TableViewCell, when a button in another TableViewCell is pressed before segueing?
我有以下表格视图:
当用户单击蓝色支付 Cash/Card 按钮时,他们会转到另一个 tableView。
我遇到的问题是;当用户单击按钮时,不会在委托方法中捕获 textView 的值。比如我实现了'TextView'协议,从TextViewclass实现了如下功能:
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 按钮,它将继续,我不确定如何捕获 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)
}
}
您可以捕获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
变量始终与每次按键时的更改保持同步。
希望对您有所帮助。
我有以下表格视图:
当用户单击蓝色支付 Cash/Card 按钮时,他们会转到另一个 tableView。
我遇到的问题是;当用户单击按钮时,不会在委托方法中捕获 textView 的值。比如我实现了'TextView'协议,从TextViewclass实现了如下功能:
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 按钮,它将继续,我不确定如何捕获 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)
}
}
您可以捕获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
变量始终与每次按键时的更改保持同步。
希望对您有所帮助。