我需要在 UIView 中显示数据。我创建了一个类名称:- MYView-UIView
import UIKit
class MYView: UIView {
@IBOutlet weak var name: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
}
func setlisttabData(chefs:listModel)
{
self.name.text = chefs.name
}
}
我的 View Controller 为:-
import UIKit
class listViewController: UIViewController {
// @IBOutlet private weak var tableView: UITableView!
@IBOutlet var chef: MYView!
private var listViewModel :ListViewModel!
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?, withViewModel viewModel:ListViewModel) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
listViewModel = viewModel
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
在此我没有使用主 Storyboard。
所以对于 listViewController
我有 .xib
在 xib 中,我在其中放置了 ScrollView 和 View 。在 View 中,我将类名称指定为 MYView。然后我在其中贴了一个标签。并给出连接。
现在我需要显示名称。该怎么做。
我在 UIView 中给出了一个函数:
func setlisttabData(chefs:listModel){
self.name.text = chefs.name
}
模型类:- 导入 UIKit
class listModel: NSObject {
var name:String!
init?(dictionary :JSONDictionary) {
guard let name = dictionary["name"] as? String else {
return
}
self.name = name
}
}
my listviewmodel:-
class listviewmodel: NSObject {
var datasourceModel:listDataModel
init(withdatasource newDatasourceModel: listDataModel) {
datasourceModel = newDatasourceModel
}
func datafordisplay(atindex indexPath: IndexPath) -> listModel{
return datasourceModel.dataListArray![indexPath.row]
}
func numberOfRowsInSection(section:Int) -> Int {
return (datasourceModel.dataListArray?.count)!
}
}
和列表数据源模型:-
class listDataModel: NSObject {
var dataListArray:Array<listModel>? = []
init(array :Array<[String:Any]>?) {
super.init()
var newArray:Array<[String:Any]> = []
if array == nil{
newArray = self.getJsonDataStored3()
}
else{
newArray = array!
}
var datalist:Array<listModel> = []
for dict in newArray{
let model = listModel(dictionary: dict)
datalist.append(model!)
}
self.dataListArray = datalist
}
}
typealias dummyDataSource3 = listDataModel
extension dummyDataSource3{
func getJsonDataStored3() ->Array<Dictionary<String,String>>{
let jsonArray = [["name":"Anjapar"] as Array<Dictionary<String,String>>
return jsonArray
}
}
我得到了模型中的值。但我认为对于下面的功能需要进行一些更改。
func datafordisplay(atindex indexPath: IndexPath) -> listModel{
return datasourceModel.dataListArray![indexPath.row]
}
我需要从该 jsondictionary 中获取名称。
那么,如何在ViewController中调用。这是在 mvvm 方法中完成的。
最佳答案
您可以使用委托(delegate)来实现此目的。
1. 创建一个具有函数声明的协议(protocol)。
2、通过协议(protocol)扩展viewController类来实现viewController中的功能。
3. 在UIView
类中获取协议(protocol)的引用。
weak var delegate: YourProtocol?
在viewController中设置
UIView
委托(delegate)view.delegate = self
在您想要的位置调用
UIView
类中的委托(delegate)函数。这将调用 UIViewController 协议(protocol)函数。
为了更好地理解委托(delegate),您可以阅读this
关于ios - 将 UIView 中的数据显示到 UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49664340/