我需要在UIView中显示数据。我创建了一个类名: - MYView-UIView
<ng-template #heading let-heading>
<h1>
{{heading}}
</h1>
</ng-template>
<ng-container *ngTemplateOutlet="heading; context: ContextObj">
</ng-container>
我的viewcontroller为: -
import UIKit
class MYView: UIView {
@IBOutlet weak var name: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
}
func setlisttabData(chefs:listModel)
{
self.name.text = chefs.name
}
}
在此我没有使用主要故事板。
所以对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()
}
}
我有.xib
在xib中我放置了滚动视图和视图。在视图中,我将类名称命名为MYView。然后我在那里放了一个标签。并给出了连接。
现在我需要显示名称。怎么做。
我在UIView中给出了一个函数:
listViewController
modelclass: - 导入UIKit
func setlisttabData(chefs:listModel){
self.name.text = chefs.name
}
和listdatasourcemodel: -
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
}
}
我需要从jsondictionary获取名称。
那么,如何在ViewController中调用。这是用mvvm方法完成的。
答案 0 :(得分:0)
你可以这样称呼:
self.chef.setlisttabData(listViewModel.datasourceModel.dataListArray)
答案 1 :(得分:0)
您可以使用委派来实现此目的
1.创建具有功能声明的协议
2.通过协议扩展viewController类,在viewController中实现该函数
3.在UIView
课程中参考协议。
weak var delegate: YourProtocol?
在viewController中设置UIView
委托
view.delegate = self
在UIView
类中调用您想要的委托函数。这将调用UIViewController协议函数。
为了更好地理解委托,您可以阅读this