2016-08-02 41 views
-1

我想要添加子视图时出现此错误。正如你可以选择错误出现的代码。我是 编程相对较新,所以我需要帮助。我正在使用Swift编写而不使用故事板。无法将类型'(MapViewController).Type'(又名'MapViewController.Type')的值转换为期望的参数类型'UIView'

忽略其中我写道:的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

+0

的MapViewController是一个视图控制器.. 。你试图将它添加到视图中...我不确定这是你想要做什么 – penatheboss

+0

是的,这是我正在尝试做的。 – Stc

+0

您无法将视图控制器添加到视图中。您可以将视图添加到视图控制器的视图或视图 – penatheboss

回答

0

那是因为你想添加作为子视图的MapViewControllerType,而不是的实际实例的视图10。

它可能只你有点帮助,但如果你没有

let mapViewController = MapViewController() 
self.view.addSubview(mapViewController.view) 

你可能是确定的,直到你想要做一些票友。

话虽这么说,你可能要经过二OO编程:什么是类,什么是一个实例,...

+0

好的,感谢您的提示。但我不能100%确定我将在哪里实施这些代码。 – Stc

+0

代替不编译的行。顺便说一句,您可能已经注意到了一个如何在viewDidLoad方法实现中添加视图作为子视图的工作示例。 – aimak

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

祝你好运,如果它仍然无法正常工作,告诉我们为什么

编辑完

如果我m正确读取问题,你试图添加一个视图控制器类型作为子视图,你不能。你应该发送一个视图的实例,而不是对象的类型。如果你不明白,这是一个单独的问题,你应该OOP的概念,如what an object is vs what an object type is。不幸的是,我不知道你在做什么,所以我不能提供完整的解决方案。

什么是您的MapCell s?他们应该是UITableViewCell吗?您是否想要将MapViews添加到单个单元格?

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

+0

我编辑问题是否有帮助。 – Stc

+0

是的,我试图在单个单元格中添加一个MapView。这是一个UICollectionViewCell – Stc

-1

MapViewController是控制器类型。当你输入“MapViewController”时,就像输入“Int”。你指的是类型,而不是它的特定版本。

试想一下,如果我说

let a = 3 + Int 

难道你想知道什么诠释添加到3?在这个比喻非常相似的方式,你想添加一个控制器的视图

同样的实例,我很好奇,为什么你不想用故事板

+0

是的,我知道它为什么不起作用。我忘了提到这一点。我在YouTube上看到一篇教程没有使用Storyboard,忘记了原因在哪里。但我只是尝试不同的东西,我也用了一些Storybard ... – Stc

+0

我明白了。就像aimak所说的那样,在这种情况下,您希望创建一个控制器实例,然后将其视图添加为子视图 –

+0

好吧,我已经搜索了一下,但我不确定在哪里编写这些代码aimak写道。 – Stc

相关问题