显示从UIView到UIViewController的数据

时间:2018-04-05 04:47:20

标签: ios swift mvvm

我需要在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方法完成的。

2 个答案:

答案 0 :(得分:0)

你可以这样称呼:

self.chef.setlisttabData(listViewModel.datasourceModel.dataListArray)

答案 1 :(得分:0)

您可以使用委派来实现此目的 1.创建具有功能声明的协议 2.通过协议扩展viewController类,在viewController中实现该函数 3.在UIView课程中参考协议。

weak  var delegate: YourProtocol?
  1. 在viewController中设置UIView委托

    view.delegate = self
    
  2. UIView类中调用您想要的委托函数。这将调用UIViewController协议函数。

  3. 为了更好地理解委托,您可以阅读this