我想通过错误处理页面到我的所有视图控制器,所以当错误提取数据错误时,它不仅显示对话框,而且显示包含错误消息和刷新按钮的XIB文件。像这样:
这是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类中实现它。谁能解决这个问题?谢谢!
方法: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)
}
}