Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在swift中取消xib视图_Ios_Swift - Fatal编程技术网

Ios 在swift中取消xib视图

Ios 在swift中取消xib视图,ios,swift,Ios,Swift,我已经为我的登录条件创建了两个xib文件。当我第一次单击某个按钮时,它会显示该文件中的第一个xib文件。当我单击该按钮时,它会显示第一个xib文件上的另一个按钮。在这里,我运行我的API,如果成功,我将尝试关闭第二个xib文件,但它不会关闭第二个xib文件。我也标记了断点,当我运行它时,它会到达断点,但它不会再次关闭。这是我如何展示我的第一个xib文件 let signingAlert = SigningAlert() signingAlert.modalPresentationStyle =

我已经为我的登录条件创建了两个xib文件。当我第一次单击某个按钮时,它会显示该文件中的第一个xib文件。当我单击该按钮时,它会显示第一个xib文件上的另一个按钮。在这里,我运行我的API,如果成功,我将尝试关闭第二个xib文件,但它不会关闭第二个xib文件。我也标记了断点,当我运行它时,它会到达断点,但它不会再次关闭。这是我如何展示我的第一个xib文件

let signingAlert = SigningAlert()
signingAlert.modalPresentationStyle = .custom
present(signingAlert,animated: true,completion: nil)
这里我称之为我的第二个xib

@IBAction func loginBtnTapped(_ sender: Any) {

    let loginAlert = LoginVC()
    loginAlert.modalPresentationStyle = .popover
    present(loginAlert,animated: true,completion: nil)
    // self.revealViewController().revealToggle(animated: true)
}
在API成功的情况下,我编写了这段代码,用于驳回xib的

self.dismiss(animated: true, completion: nil)
这就是我正在编写的APIfunc loginAPICall(){


但它并没有取消我的xib,我怎么能取消它呢?

您只能从主线程取消屏幕。如果您从异步或非主线程尝试,那么它将不起作用

替换

  self.dismiss(animated: true, completion: nil)                


您只能从主线程关闭屏幕。如果您从异步线程或非主线程尝试,那么它将无法工作

替换

  self.dismiss(animated: true, completion: nil)                


据我所知,你的问题是

HomeClass -> present SigningAlert class -> present LoginVC class
所以,当您在提交第二个Xib之前并没有取消第一个Xib时,问题就发生了

解决方案: 在
iAction func loginBtnTapped(uSender:Any){
中,您可以调用委托或类似的东西来通知HomeClass known。在HomeClass中,您的函数应该如下所示

dismiss(animated: true) {
            let loginAlert = LoginVC()
            loginAlert.modalPresentationStyle = .popover
             present(loginAlert,animated: true,completion: nil)
        }
更新: 在你的alertVC中 @iAction func LoginBTN(发件人:任意){

}

在HomeClass中,您应该实现obsever侦听通知:

NotificationCenter.default.addObserver(self, selector: #selector(handleNotif(_:)), name: NSNotification.Name(rawValue: "shouldShowLoginVC"), object: nil)
并增加了处理功能 @objc func handleNotif(\发送方:任何){


据我所知,你的问题是

HomeClass -> present SigningAlert class -> present LoginVC class
所以,当您在提交第二个Xib之前并没有取消第一个Xib时,问题就发生了

解决方案: 在
iAction func loginBtnTapped(uSender:Any){
中,您可以调用委托或类似的东西来通知HomeClass known。在HomeClass中,您的函数应该如下所示

dismiss(animated: true) {
            let loginAlert = LoginVC()
            loginAlert.modalPresentationStyle = .popover
             present(loginAlert,animated: true,completion: nil)
        }
更新: 在你的alertVC中 @iAction func LoginBTN(发件人:任意){

}

在HomeClass中,您应该实现obsever侦听通知:

NotificationCenter.default.addObserver(self, selector: #selector(handleNotif(_:)), name: NSNotification.Name(rawValue: "shouldShowLoginVC"), object: nil)
并增加了处理功能 @objc func handleNotif(\发送方:任何){

在你的登录VC

protocol LoginDelegate: class {
   func didDismiss()
} 

class LoginVC: UIViewController {
  weak var delegate: LoginDelegate?
  var successAlert: UIAlertController?
func onsuccess(title: String = "Success!", message: String) {
  successAlert = UIAlertController(title: title, message: message, preferredStyle: .alert) 
  successAlert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: { [weak self] _ -> Void in
       self?.delegate?.didDismiss()
       self?.dismiss(animated: true, completion: nil)
   }))
   present(successAlert, animated: true, completion: nil)

 }
替换

if status == 200{
   self.showsuccessAlert(message: "You are successfully LoggedIn")
   self.dismiss(animated: true, completion: nil)

在登录VC中添加以下函数
onsuccess

protocol LoginDelegate: class {
   func didDismiss()
} 

class LoginVC: UIViewController {
  weak var delegate: LoginDelegate?
  var successAlert: UIAlertController?
func onsuccess(title: String = "Success!", message: String) {
  successAlert = UIAlertController(title: title, message: message, preferredStyle: .alert) 
  successAlert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: { [weak self] _ -> Void in
       self?.delegate?.didDismiss()
       self?.dismiss(animated: true, completion: nil)
   }))
   present(successAlert, animated: true, completion: nil)

 }
在你的签名中

@IBAction func loginBtnTapped(_ sender: Any) {

        let loginAlert = LoginVC()
        // Add delegate to self
        loginAlert.delegate = self
        loginAlert.modalPresentationStyle = .popover
        present(loginAlert,animated: true,completion: nil)
        // self.revealViewController().revealToggle(animated: true)
 }

extension SigningVC: LoginDelegate {
  func didDismiss() {
    self.dismiss(animated: true, completion: nil)
  }
}
在你的登录VC

protocol LoginDelegate: class {
   func didDismiss()
} 

class LoginVC: UIViewController {
  weak var delegate: LoginDelegate?
  var successAlert: UIAlertController?
func onsuccess(title: String = "Success!", message: String) {
  successAlert = UIAlertController(title: title, message: message, preferredStyle: .alert) 
  successAlert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: { [weak self] _ -> Void in
       self?.delegate?.didDismiss()
       self?.dismiss(animated: true, completion: nil)
   }))
   present(successAlert, animated: true, completion: nil)

 }
替换

if status == 200{
   self.showsuccessAlert(message: "You are successfully LoggedIn")
   self.dismiss(animated: true, completion: nil)

在登录VC中添加以下函数
onsuccess

protocol LoginDelegate: class {
   func didDismiss()
} 

class LoginVC: UIViewController {
  weak var delegate: LoginDelegate?
  var successAlert: UIAlertController?
func onsuccess(title: String = "Success!", message: String) {
  successAlert = UIAlertController(title: title, message: message, preferredStyle: .alert) 
  successAlert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: { [weak self] _ -> Void in
       self?.delegate?.didDismiss()
       self?.dismiss(animated: true, completion: nil)
   }))
   present(successAlert, animated: true, completion: nil)

 }
在你的签名中

@IBAction func loginBtnTapped(_ sender: Any) {

        let loginAlert = LoginVC()
        // Add delegate to self
        loginAlert.delegate = self
        loginAlert.modalPresentationStyle = .popover
        present(loginAlert,animated: true,completion: nil)
        // self.revealViewController().revealToggle(animated: true)
 }

extension SigningVC: LoginDelegate {
  func didDismiss() {
    self.dismiss(animated: true, completion: nil)
  }
}



过去的
API
success代码。我已编辑检查。@PratikPrajapatiDo你想同时解雇两个XIB@Awaisyes我必须同时解雇两个。@Mansican你能显示你的showsuccessAlert代码@awaisCast
API
success代码吗?我已编辑检查。@PratikPrajapatiDo你想解雇两个XIB@Awaisyes我必须解雇同时使用ss两个。@Mansican you show successalert code@Awaisi我已经这样做了,但它仍然没有放弃。@code cracker你可以把api调用的完整代码放在答案中吗?请检查它,我已经更新了我的问题并粘贴了api代码。@code cracker你没有在主线程上这样做,请检查我更新的答案,我没有以前在主线程中使用过,但它不起作用。@Code Cracker我已经这样做了,但它仍然没有放弃。@Code Cracker你可以把api调用的完整代码放在回答中吗?请检查它,我已经更新了我的问题并粘贴了api代码。@Code Cracker你没有在主线程中使用,请检查我更新的回答,我已经试过了主线程之前,但它不工作。@代码破解者是的,场景与u描述相同,我必须在哪个类中编写此代码@baohung02@Awais:结果是什么?我在上面的解决方案中得到了。谢谢您的时间和回答:)。@baohung02是的,场景与您描述的相同,我必须在哪个类中编写此解雇代码?@baohung02@Awais:结果是什么?我在上面的解决方案中得到了。感谢您的时间和回答:)。@baohung02i没有得到这行successAlert=UIalertController…..这是为什么?@mansitis是我的成功警报代码func showsucessalert(title:String=“success!”,message:String){let alertController=UIalertController(标题:标题,消息:消息,首选样式:。警报)alertController.addAction(UIAlertAction(标题:“确定”,样式:。默认值,处理程序:nil))当前(alertController,动画:true,完成:nil)}共享
self.showsuccessAlert的代码(消息:“您已成功登录”)
,我可以解释一下,然后检查更新后的答案,如果您不明白,请告诉我@awais我在扩展中有这个函数,当我试图在那里编写代码时,我在successAlert中遇到了一些错误。@Mansii没有得到这行successAlert=UIalertController…..这是干什么的?@Mansithis是我的成功警报代码func showsucCesAlert(title:String=“Success!”,message:String){let alertController=UIAlertController(title:title,message:message,preferredStyle:.alert)alertController.addAction(UIAlertAction(title:Ok,style:.default,handler:nil))存在(alertController,动画:true,完成:nil)}分享你的代码给
self.showsccessalert(信息:“你成功登录了”)
,我可以解释一下,然后检查更新的答案,如果你不明白,请告诉我@Awaisi我在扩展中有这个函数,当我试着在那里写代码时,我得到了一些关于成功的错误。@Mansi