单击XIB按钮时刷新当前视图控制器数据请求

问题描述 投票:0回答:1

我想通过错误处理页面到我的所有视图控制器,所以当错误提取数据错误时,它不仅显示对话框,而且显示包含错误消息和刷新按钮的XIB文件。像这样:

enter image description here

这是XIB类代码:

import UIKit

class ErrorMessage: UIView {
    @IBOutlet weak var imageViewError: UIImageView!
    @IBOutlet weak var labelError: UILabel!
    @IBOutlet weak var buttonTryAgain: UIButton!
    static var message: String?

    override func awakeFromNib() {
        labelError.text = ErrorMessage.message
    }

    @IBAction func didTapTryAgain(_ sender: Any) {
        Dialog.showProgressDialog(info: "")
    }
}

这是我的基本控制器代码,谁处理所有问题。

import Foundation

class BaseViewController: UIViewController {

    var uiView =  UIView();

    override func viewDidLoad() {

    }

    func getErrorMessage(message:String) {
        super.viewDidLoad()
        ErrorMessage.message = message
        guard let viewErrorMessage = Bundle.main.loadNibNamed("ErrorMessage", owner: self, options: nil)?.first as? ErrorMessage else { return}
        self.view.addSubview(viewErrorMessage)
    }

}

以下是我在另一个类中调用它的方法,我扩展了BaseViewController,因此它可以全局显示错误问题,而不再重新声明该类:

func onFailedDeleteCart(errorMessage: String) {
        getErrorMessage(message: errorMessage)
    }

现在我可以传递错误信息。

问题是,当我点击它时,我希望刷新按钮刷新当前的视图控制器。当我点击它时可能调用当前View Controller的viewDidLoad将是很好的逻辑,但我不知道如何在XIB类中实现它。谁能解决这个问题?谢谢!

ios swift xib
1个回答
0
投票

方法:1

步骤:1为回调创建闭包

typealias RefreshBlock = (()->())?

步骤:2在UIView类中定义闭包

步骤:3如果用户点击刷新按钮,则调用关闭

class ErrorMessage: UIView {
    @IBOutlet weak var imageViewError: UIImageView!
    @IBOutlet weak var labelError: UILabel!
    @IBOutlet weak var buttonTryAgain: UIButton!
    var refreshBlock:RefreshBlock!
    static var message: String?

    override func awakeFromNib() {
        labelError.text = ErrorMessage.message
    }

    // Step : 3
    @IBAction func didTapTryAgain(_ sender: UIButton) {
        refreshBlock!()
    }
}

步骤:4当addSubview调用时,在闭包中赋值

class BaseViewController: UIViewController {

    override func viewDidLoad() {
    }

    func getErrorMessage(message:String) {
        super.viewDidLoad()
        ErrorMessage.message = message
        guard let viewErrorMessage = Bundle.main.loadNibNamed("ErrorMessage", owner: self, options: nil)?.first as? ErrorMessage else { return}
        viewErrorMessage.refreshBlock = {()
            self.viewDidLoad()
            print("Refresh Contents")
        }   
        self.view.addSubview(viewErrorMessage)
    }

}

方法:2

将您当前的UIViewController参考文献传递给UIView课程。请参阅以下代码。

class ErrorMessage: UIView {
    @IBOutlet weak var imageViewError: UIImageView!
    @IBOutlet weak var labelError: UILabel!
    @IBOutlet weak var buttonTryAgain: UIButton!
    var currentVC:UIViewController!
    static var message: String?

    override func awakeFromNib() {
        labelError.text = ErrorMessage.message
    }

    @IBAction func didTapTryAgain(_ sender: UIButton) {
        currentVC.viewDidLoad()
    }
}


class BaseViewController: UIViewController {

    override func viewDidLoad() {

    }

    func getErrorMessage(message:String) {
        super.viewDidLoad()
        ErrorMessage.message = message
        guard let viewErrorMessage = Bundle.main.loadNibNamed("ErrorMessage", owner: self, options: nil)?.first as? ErrorMessage else { return}
        viewErrorMessage.currentVC = self
        self.view.addSubview(viewErrorMessage)
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.