gpt4 book ai didi

ios - 将 UIView 中的数据显示到 UIViewController

转载 作者:行者123 更新时间:2023-11-30 11:36:51 25 4
gpt4 key购买 nike

我需要在 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/

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