Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将用户输入的文本传递到以下序列_Ios_Swift_Segue - Fatal编程技术网

Ios 将用户输入的文本传递到以下序列

Ios 将用户输入的文本传递到以下序列,ios,swift,segue,Ios,Swift,Segue,我有一个带有文本字段的屏幕 当用户将文本输入到该文本字段中,然后点击文本字段,则会出现一个segue 以下屏幕的标签文本应更改为用户在上一屏幕中输入的文本 class ViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var inputField: UITextField! override func viewDidLoad() { super.viewDidLoad(

我有一个带有文本字段的屏幕

当用户将文本输入到该文本字段中,然后点击文本字段,则会出现一个segue

以下屏幕的标签文本应更改为用户在上一屏幕中输入的文本

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
        }
    }
}