无法将类型'(MapViewController).Type'(又名'MapViewController.Type')的值转换为预期的参数类型'UIView'

时间:2016-08-02 20:28:04

标签: ios swift uiview

当我想添加子视图时,我遇到了这个错误。您可以在出现错误的代码中找到它。我 编程比较新,所以我需要帮助。我正在写Swift而不使用故事板。

忽略我写的地方:backgroundColor = UIColor.blueColor()

编辑:我忘了提到我知道导致错误的原因。我知道MapViewController是一个UIViewController,我把它放在一个UIView中。但我不知道如何解决问题。

我想要的是将mapview添加到单个单元格

import UIKit
import MapKit

class MapCell1: MapCell, MKMapViewDelegate {



override func setupViews() {

    backgroundColor = UIColor.blueColor()

    addSubview(MapViewController) //Cannot convert value of type '(MapViewController).Type' (aka 'MapViewController.Type') to expected argument type 'UIView'

}



}

import UIKit

import MapKit

class MapViewController: UIViewController {

var window: UIWindow?
var mapView: MKMapView?

override func viewDidLoad() {
    super.viewDidLoad()

    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    self.view.backgroundColor = UIColor.whiteColor()

    self.mapView = MKMapView(frame: CGRectMake(0, 20, (self.window?.frame.width)!, 300))
    self.view.addSubview(self.mapView!)


}

}

以下是MapCell的代码:

import UIKit


class MapCell: BaseCell, UICollectionViewDelegate {

    let collectionView: UICollectionView = {
    let layout = UICollectionViewFlowLayout()
    let cv = UICollectionView(frame: CGRectZero, collectionViewLayout: layout)
    cv.backgroundColor = UIColor.redColor()
    return cv
}()


        let cellId = "cellId"

override func setupViews() {
    super.setupViews()

    addSubview(collectionView)
    addconstraintsWithFormat("H:|[v0]|", views: collectionView)
    addconstraintsWithFormat("V:|[v0]|", views: collectionView)



}


}


And BaseCell: 

mport UIKit

class BaseCell: UICollectionViewCell {
    override init(frame: CGRect) {
    super.init(frame: frame)
    setupViews()
}

func setupViews() {

}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")

}

class BaseCell: UICollectionViewCell {


    func setupViews() {


    }




}

}

Here is the new error

3 个答案:

答案 0 :(得分:0)

这是因为您尝试将Type的{​​{1}}添加为子视图,而不是MapViewController的实际实例的视图。

它可能只对你有所帮助,但如果你做了

MapViewController

在你想做更高级的事情之前,你可能会好起来的。

话虽这么说,你可能想要通过OO编程:什么是类,什么是实例,......

答案 1 :(得分:0)

编辑:

首先,不要为您的班级MapViewController命名。这已经是一种视图控制器了,所以你应该创建自己的名字(我将使用我的首字母将其称为JLMapView)。由于您尝试将MapViews添加到单元格,因此您也不应继承表单UIViewController。相反,只需将JLMapView继承自UIView

因此,您的类声明应如下所示:

class JLMapView: UIView {
//etc..

试试MapCell1

class MapCell1: MapCell, MKMapViewDelegate {
     var mapView = JLMapView()
     override func setupViews() {

    backgroundColor = UIColor.blueColor()

    addSubview(mapView)
}

这样,您就可以添加JLMapView的实例。你最初在addSubviews中有类类型,它混淆了Swift,因为它不能添加一种对象,它需要一个特定的对象实例。这就像去汽车经销商,而不是要求SUV或轿车或这辆车或那辆车,你要求一辆汽车'作为一个想法。如果您仍然感到困惑,请认真考虑审核面向对象的编程概念,特别是data modeling

祝你好运,如果它仍然无法运作,请告诉我们原因

结束编辑

如果我正确地阅读了问题,您可以尝试将视图控制器类型添加为子视图,但您无法这样做。您应该发送视图的实例,而不是对象的类型。如果您不理解,这是一个单独的问题,您应该使用OOP概念,例如what an object is vs what an object type is。不幸的是,我无法告诉你他们想要做什么,所以我无法提供完整的解决方案。

你的MapCell是什么?它们应该是UITableViewCell吗?您是否尝试将MapViews添加到单个单元格中?

请详细说明,我会进一步帮助你

答案 2 :(得分:-1)

MapViewController是控制器类型。当您键入" MapViewController"时,它就像键入" Int"。您指的是类型,而不是它的特定版本。

想象一下,如果我说

let a = 3 + Int

你不想知道要添加到3的Int是什么?以类似于此类比的方式,您想要添加控制器视图的实例

另外,我很好奇为什么你不想使用Storyboard