【问题标题】:Calling a segue everytime a table cell in an array is clicked - swift每次单击数组中的表格单元格时调用 segue - swift
【发布时间】:2016-05-18 10:53:20
【问题描述】:

每次单击数组中的单元格时,我都会尝试调用 segue。我不断遇到错误。

  1. 键入“addPRTableViewController?”没有成员文本。

  2. 'String' 类型的值永远不能为零,不允许比较。

这是我的代码

Viewcontroller 我想在单击单元格时从 FROM 转移

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

    }

}

我不太清楚我为什么会得到这个。任何信息将不胜感激。

【问题讨论】:

    标签: ios arrays swift uitableview segue


    【解决方案1】:

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

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

    希望这会有所帮助。 :)

    【讨论】:

      【解决方案2】:

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

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

      最后你的 secondViewcontroller 必须有一个属性 text:

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

      【讨论】:

      • 我仍然收到错误'type "yourOtherVC" has no member "text"'
      • 您必须在 viewController 类中创建 text 属性。如上图
      【解决方案3】:

      这里有几处错误,不过当你刚开始时很容易犯错误。

      你在 viewController 中的变量 text 是在 viewDidLoad 中声明的,这意味着它在调用 viewDidLoad 之前或之后不存在,导致第一个错误(类没有变量 text,因为它是'由 viewDidLoad 拥有)。

      修复 viewDidLoad 上方的声明文本。

      第二个错误是因为您将 text 声明为非可选类型 String,所以它永远不能为 nil。如果您知道在每种情况下都会在您进行转场时设置文本,那很好。否则将其声明为“字符串?”

      例如:

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

      【讨论】:

        猜你喜欢
        • 2016-08-09
        • 1970-01-01
        • 1970-01-01
        • 2014-12-13
        • 1970-01-01
        • 1970-01-01
        • 2018-11-16
        • 1970-01-01
        • 2020-04-25
        相关资源
        最近更新 更多