在swift中传递视图之间的布尔标志

时间:2017-01-05 15:21:39

标签: ios swift oop

我有一个包含一些文本标签和多个其他属性的视图控制器。我想使用该视图控制器来编辑视图和查看视图的内容。现在我要做的是传递Flag,以便它指示请求是用于编辑字段还是查看字段。

我已经这样做但没有奏效。让我说我的包含视图的视图控制器是第三个View Controller,我从第一个和第二个视图控制器访问这个视图控制器。

//In third View COntroller
var isEdit: Bool! = false
func viewDidLoad(){
    self.loadData()
}
 override func loadData{
    if isEdit == false{
       //print this is edit mode
    }
    else if isEdit == true{
      //This is view mode
    }
  else{
  //print error navigtion
     }
}

我正在从按钮点击操作的第一个视图控制器访问此视图控制器

let mapViewFirst = self.storyboard?.instantiateViewControllerWithIdentifier("ThirdViewController") as? ThirdViewController
mapViewFirst.isEdit == true
self.navigationController?.pushViewController(mapViewFirst!, animated: true)

和secondViewController一样

let mapViewSecond = self.storyboard?.instantiateViewControllerWithIdentifier("ThirdViewController") as? ThirdViewController
mapViewSecond.isEdit == false
self.navigationController?.pushViewController(mapViewSecond!, animated: true)

它始终在isEdit == false上运行 即视图控制器始终处于编辑模式,它永远不会移动到其他条件。任何人都可以找到解决我问题的更好方法。

1 个答案:

答案 0 :(得分:2)

假设isEdit和iseditMode之间的区别在你的问题中是一个拼写错误,而不是在你的实际代码中,而且mapViewFirst和mapViewControllerObj以及mapViewSecond和mapViewControllerObj之间的差异也只是你问题中的拼写错误,而不是你的实际代码。< / p>

然后它无法正常工作,因为在视图控制器加载到内存时调用viewDidLoad(),这是在调用instantiateViewControllerWithIdentifier时发生的。

要获得您想要的功能,请将viewDidLoad中的loadData()移动到viewWillAppear,当视图控制器被推送到堆栈时将调用它。 (并确保按照您的意图覆盖viewWillAppear,而不是像在viewDidLoad()中省略的那样)