gpt4 book ai didi

ios - 单击 XIB 按钮时刷新当前 View Controller 数据请求

转载 作者:行者123 更新时间:2023-11-29 05:50:50 25 4
gpt4 key购买 nike

我想通过我的所有 View Controller 制作错误处理页面,因此当错误获取数据错误时,它不仅显示对话框,而且显示包含错误消息和刷新按钮的 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: "")
}
}

这是我的基本 Controller 代码,负责处理所有问题。

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 。也许当我单击当前 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)
}

}

关于ios - 单击 XIB 按钮时刷新当前 View Controller 数据请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55682542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com