Ios 将用户输入的文本传递到以下序列
我有一个带有文本字段的屏幕 当用户将文本输入到该文本字段中,然后点击文本字段,则会出现一个segue 以下屏幕的标签文本应更改为用户在上一屏幕中输入的文本Ios 将用户输入的文本传递到以下序列,ios,swift,segue,Ios,Swift,Segue,我有一个带有文本字段的屏幕 当用户将文本输入到该文本字段中,然后点击文本字段,则会出现一个segue 以下屏幕的标签文本应更改为用户在上一屏幕中输入的文本 class ViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var inputField: UITextField! override func viewDidLoad() { super.viewDidLoad(
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var inputField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
inputField.delegate = self
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
view.addGestureRecognizer(tap)
}
func dismissKeyboard() {
inputField.resignFirstResponder()
}
func textFieldDidEndEditing(inputField: UITextField) {
let info = inputField.text
print(info)
performSegueWithIdentifier("goToBlue", sender: info)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "goToBlue" {
if let blueVC = segue.destinationViewController as? BlueViewController {
if let sentValue = sender as? String {
blueVC.receptacle = sentValue
}
}
}
}
}
print(info)
语句不打印任何内容
但是,segue可以工作,但标签不显示任何内容
class BlueViewController: UIViewController {
@IBOutlet weak var blueText: UILabel!
var receptacle = ""
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
blueText.text = receptacle
}
}
显然这与时间有关。。。有什么想法吗?您的ViewWillAspect函数首先工作,此时您的容器变量未设置或标签未初始化。试试这个
@IBOutlet weak var blueText: UILabel! { didSet { blueText.text = receptacle } }
var receptacle: String? { didSet { blueText.text = receptacle } }
改变
到
下面是一种非常常见的方法(仅供参考,如果带有InputExtField的vc是一个popover,您可以在呈现vc上调用dismissViewController)
不要使用
发送方
传递您的值。sender
仅用于检查哪个元素启动了序列,而不用于传递数据。只需将您的info
设置为类变量,并按如下方式传递值:
var info:String!
func textFieldDidEndEditing(inputField: UITextField) {
info = inputField.text
print(info)
performSegueWithIdentifier("goToBlue", sender: info)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "goToBlue" {
if let blueVC = segue.destinationViewController as? BlueViewController {
blueVC.receptacle = info
}
}
}
您是否尝试在设置blueVC.receptor的行上放置断点以确保代码路径被实际命中?@HugoTunius我没有,但是即使是
print(info)
语句也不会打印任何内容您是否从故事板设置文本字段的委托?如果不是,则应在中添加inputField.delegate=self
viewDidLoad@HugoTunius明白了,它现在打印,但是下面的屏幕不显示文本..在blueVC.receptor=sentValue
上设置一个断点,并确保它是HIT,这对于我尝试执行的操作来说似乎过于复杂。还有别的方法吗?这是正确的方法。但如果需要,可以将blueText.text=插座代码放入viewDidLoad函数中。重写func viewDidLoad(){super.viewDidLoad()blueText.text=插座}您有导航控制器吗?你把你的segue和push segue连接起来了吗?不,我没有,也没有。你不能作为发送者传递信息,你可以,但它不起作用。我在上面给了你一个答案,看看吧,我也很怀疑,但我不确定。因为这是最好的解决方案,所以对您的答案进行了投票。此崩溃导致我的应用程序意外地发现零(…)可选值:(此外,我想了解为什么我的代码不工作,它在哪里崩溃?在哪一行?blueVC.receptor=info
@christian,但我真的更想了解如何修复我拥有的东西,但这不是我想要的。我希望事件在用户点击文本字段时发生。您可以在文本字段中使用相同的结构。)ndEditing.Btw,它仍然不起作用吗?(我编辑了我的答案)你在github上有吗?我很确定这与时间有关,因为当我在PrepareForsgue中放置print(sentValue)
时,它会输出正确的值,但是当我放置print(插座)时
在另一个ViewController中,它打印出一条空字符串如果你说的效果很好,你是说动画,是的,效果很好!我甚至将BlueViewController中插座的值更改为插座=“fail”
以查看标签是否得到更新,它确实得到了更新!
override func viewDidLoad() {
super.viewDidLoad()
blueText.text = receptacle
}
func textFieldDidEndEditing(inputField: UITextField) {
textField.resignFirstResponder()
let info = inputField.text
print(info)
performSegueWithIdentifier("goToBlue", sender: info)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "goToBlue" {
if let blueVC = segue.destinationViewController as? BlueViewController {
blueVC.receptacle = self.inputField.text
}
}
}
var info:String!
func textFieldDidEndEditing(inputField: UITextField) {
info = inputField.text
print(info)
performSegueWithIdentifier("goToBlue", sender: info)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "goToBlue" {
if let blueVC = segue.destinationViewController as? BlueViewController {
blueVC.receptacle = info
}
}
}