Ios 每次单击数组中的表单元格时调用segue-swift

Ios 每次单击数组中的表单元格时调用segue-swift,ios,arrays,swift,uitableview,segue,Ios,Arrays,Swift,Uitableview,Segue,我试图在每次单击数组中的单元格时调用一个序列。我总是犯错误 类型“addPRTableViewController”没有成员文本 “字符串”类型的值不能为零,不允许进行比较 这是我的密码 单击单元格时要从中分离的Viewcontroller override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { let text = "Your text"

我试图在每次单击数组中的单元格时调用一个序列。我总是犯错误

  • 类型“addPRTableViewController”没有成员文本

  • “字符串”类型的值不能为零,不允许进行比较

  • 这是我的密码

    单击单元格时要从中分离的Viewcontroller

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    
        let text = "Your text"
        performSegueWithIdentifier("YourSegue", sender: text)
    }
    
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "YourSegue" {
            let yourOtherVC = segue.destinationViewController as? addPRTableViewController
            if let text = sender as? String {
                addPRTableViewController?.text = text // Error 1
            }
        }
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.tableFooterView = UIView()
        txtPR.delegate = self
    
        var text = String() 
    
    
        if text != nil { // Error 2
            txtPR.text = text
    
        }
    
    }
    
    单击其他视图控制器中的单元格时,我要转到的视图控制器

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    
        let text = "Your text"
        performSegueWithIdentifier("YourSegue", sender: text)
    }
    
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "YourSegue" {
            let yourOtherVC = segue.destinationViewController as? addPRTableViewController
            if let text = sender as? String {
                addPRTableViewController?.text = text // Error 1
            }
        }
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.tableFooterView = UIView()
        txtPR.delegate = self
    
        var text = String() 
    
    
        if text != nil { // Error 2
            txtPR.text = text
    
        }
    
    }
    

    我不太清楚为什么我会得到这个。请提供任何信息。

    PerformsgueWithIdentifier将您的视图控制器作为第二个参数,而不是字符串:

    performSegueWithIdentifier("YourSegue", sender: self)
    
    此外,您的prepareforsegue错误。请在firstViewController中添加一个文本属性,并按如下方式使用它:

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
      if segue.identifier == "YourSegue" {
        let yourOtherVC = segue.destinationViewController as? addPRTableViewController
            yourOtherVC?.text = self.text
      }
    }
    
    最后,第二个ViewController必须具有属性文本:

    class addPRTableViewController : UIViewController {
        var text:String
        ....
    }
    

    这里有两件事是错误的,当你刚刚开始的时候,很容易犯错误

    您要使用的viewController中的变量文本在viewDidLoad中声明,这意味着它在调用viewDidLoad之前或之后不存在,从而导致第一个错误(该类没有变量文本,因为它由viewDidLoad“拥有”)

    若要修复此问题,请在viewDidLoad上方声明文本

    第二个错误是因为您将文本声明为非可选类型字符串,因此它永远不能为nil。如果您知道在任何情况下,当您继续时都会设置文本,那么这是很好的。否则将其声明为“String”

    例如:


    您的代码中有一些错误。这是正确的一个:

    class viewController: UIViewController{
    
    var text:String = ""
    
    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    
        text = "Your text"
        performSegueWithIdentifier("YourSegue", sender: self)
    }
    
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
      if segue.identifier == "YourSegue" {
        let yourOtherVC = segue.destinationViewController as? addPRTableViewController
            yourOtherVC?.text = text
      }
    }
    
    在addPRTableViewController中

    class addPRTableViewController: UITableViewController {
    
    var text:String = ""
    
    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.tableFooterView = UIView()
        txtPR.delegate = self
    
        if text != nil {
            txtPR.text = text!
        }
    }
    

    希望这有帮助。:)

    我仍然会遇到错误“type“yourOtherVC”没有成员“text”。您必须在viewController类中创建text属性。如上所示