当我想添加子视图时,我遇到了这个错误。您可以在出现错误的代码中找到它。我 编程比较新,所以我需要帮助。我正在写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() {
}
}
}
答案 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