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"
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属性。如上所示