ios - ViewController 对象为零

标签 ios swift

我有 2 个 View Controller 。
1. View Controller (VC)
2.WebViewController(WVC)

在 VC 中,我单击一个按钮,然后显示 WVC。 成功完成 WVC 中的所有任务后,我想显示 VC 并在 VC 中执行特定功能。

现在,Storyboard 包含一些对象,并通过单击和拖动将其添加到 VC。 最初,它有一些值(不是零)。 我点击按钮,WVC被推送,完成WVC中的所有任务后, VC 已推送。

现在VC中的一些值是nil。 错误,欢迎(UILabelUIView)为零... 还有就是想调用VC中的函数。 怎么可能。?

代码

ViewController.swift

class LoginController:UIViewController,UITextFieldDelegate{
    @IBOutlet weak var password: UITextField!
    @IBOutlet weak var username: UITextField!
    @IBOutlet weak var error: UILabel!
    @IBOutlet weak var welocome: UILabel!

    ......

    @IBAction func BtnClicked(sender: AnyObject) {
     let webViewCnt = self.storyboard!.instantiateViewControllerWithIdentifier("WebViewController") as UIViewController
        self.navigationController?.pushViewController(webViewCnt, animated: true)
    }
    func doSomeProcess(){

    }
}

WebViewController.swift

class WebViewController: UIViewController, UITextFieldDelegate,UIWebViewDelegate {
 override func viewDidLoad() {
    super.viewDidLoad()
    webView.delegate = self

    self.start()
}
 func start(){
      ---- do some process ----
      dispatch_async(dispatch_get_main_queue(), { () -> Void in
        let ViewCont = self.storyboard!.instantiateViewControllerWithIdentifier("LoginController") as UIViewController

        self.navigationController?.pushViewController(ViewCont, animated: true)
        ViewController().doSomeProcess() // call viewcontroller doSomeProcess() function
       }
   })
 }
}

最佳答案

很简单,您正在将 VC 推向 WVC, 从逻辑上讲,将 WVC 推送到 NavigationController 后。 它将 WVC 添加到导航堆栈的顶部。 最好从导航中弹出此 WVC,它将自动显示具有先前值的 VC。

用这个

ViewController.swift

class LoginController:UIViewController,UITextFieldDelegate{
    @IBOutlet weak var password: UITextField!
    @IBOutlet weak var username: UITextField!
    @IBOutlet weak var error: UILabel!
    @IBOutlet weak var welocome: UILabel!
    var isBackFromWVC = false
    ......

    @IBAction func BtnClicked(sender: AnyObject) {
       let webViewCnt = self.storyboard!.instantiateViewControllerWithIdentifier("WebViewController") as UIViewController
        self.navigationController?.pushViewController(webViewCnt, animated: true)   
       isBackFromWVC = true
    }
    func doSomeProcess(){

    }
    func vieWillAppear(){
      if(isBackFromWVC){
        doSomeProcess()
      }
   }
}

WebViewController.swift

class WebViewController: UIViewController, UITextFieldDelegate,UIWebViewDelegate {
 override func viewDidLoad() {
    super.viewDidLoad()
    webView.delegate = self

    self.start()
 }
 func start(){
      ---- do some process ----
      dispatch_async(dispatch_get_main_queue(), { () -> Void in

         self.navigationController?.popViewController(animated:true)
       }
      })
  }
}

关于ios - ViewController 对象为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45931291/

相关文章:

objective-c - 将 TabBarController 推送到 View

ios - tinderSwipeCards 数组人口

ios - 如何在 Swift 中验证澳大利亚电话号码?

协议(protocol)中常量的快速初始化

ios - 两个对象没有相互接触,但 contactTestBetween() 返回结果

swift - macOS - Swift 4.0 容器 View 不显示 NSView

ios - Swift 获取 UITextField 占位符标签颜色

iOS 单元测试 : How to unit test firstResponderStatus

ios - 是否有原生图像附加到 ios Storyboard上的按钮?

ios - NSTimer 增长数据量