从 UIViewController 中删除我的自定义 MKMapView
Remove My Custom MKMapView from UIViewController
我在 UIViewController
上创建了一个大小为 200x200 的自定义 MKMapView
来显示从当前位置到目标位置的路径。它显示位置和路径。但现在我想关闭这个 MKMapView
,我想看看我的 UIViewController
。
所以我在 MKMapView
的右上角创建了一个按钮,但我无法删除 MKMapView
。
我已经在按钮的操作上尝试了下面的代码。
func close() {
mapView!.removeFromSuperview()
}
我已经声明了这样的地图视图:
var mapView:MKMapView? = MKMapView()
然后我从 viewDidLoad() 中调用了一个方法 showMap(),如下所示:
func showMap() {
//Setup our Map View
mapView!.mapType = .Standard
mapView!.showsUserLocation = true
mapView!.frame = CGRectMake(topView.frame.origin.x, topView.frame.origin.y, topView.frame.size.width, topView.frame.size.height)
mapView!.delegate = self
view.addSubview(mapView!)
}
在此之后我这样调用了 showCloseButtonForMap():
func showCloseButtonForMap() {
let mapCrossBtn = UIButton()
mapCrossBtn.frame = CGRectMake(crossBtn.frame.origin.x+20, crossBtn.frame.origin.y+20, crossBtn.frame.size.width, crossBtn.frame.size.height)
if let image = UIImage(named: "X@2x.png") {
mapCrossBtn.setImage(image , forState: .Normal)
}
mapCrossBtn.backgroundColor = UIColor.blackColor()
mapCrossBtn.addTarget(topView, action: "close", forControlEvents: .TouchUpInside)
view.addSubview(mapCrossBtn)
}
这里的 crossBtn 是另一个现在隐藏的按钮。
任何帮助将不胜感激。
错误日志:
通信错误:{ count = 1, contents =
"XPCErrorDescription" => { 长度 = 22,内容 = "Connection interrupted" }
}>
2015-11-19 15:02:27.390 YEWADemo[2328:235956] -[UIView close]: 无法识别的选择器发送到实例 0x7fc6d0c32270
2015-11-19 15:02:27.408 YEWADemo[2328:235956] * 由于未捕获的异常终止应用程序 'NSInvalidArgumentException',原因:'-[UIView close]:无法识别的选择器发送到实例0x7fc6d0c32270'
* 首先抛出调用栈:
(
0 CoreFoundation 0x0000000107175f45 exceptionPreprocess + 165
1 libobjc.A.dylib 0x0000000108e9cdeb objc_exception_throw + 48
2 CoreFoundation 0x000000010717e56d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
3 核心基础 0x00000001070cbeea ___forwarding_ + 970
4 核心基础 0x00000001070cba98 _CF_forwarding_prep_0 + 120
5 UIKit 0x0000000107995e91 -[UIApplication sendAction:to:from:forEvent:] + 92
6 UIKit 0x0000000107b014d8 -[UIControl sendAction:to:forEvent:] + 67
7 UIKit 0x0000000107b017a4 -[UIControl _sendActionsForEvents:withEvent:] + 311
8 UIKit 0x0000000107b008d4 -[UIControl touchesEnded:withEvent:] + 601
9 UIKit 0x0000000107a03ed1 -[UIWindow _sendTouchesForEvent:] + 835
10 UIKit 0x0000000107a04c06 -[UIWindow 发送事件:] + 865
11 UIKit 0x00000001079b42fa -[UIApplication sendEvent:] + 263
12 UIKit 0x000000010798eabf _UIApplicationHandleEventQueue + 6844
13 核心基础 0x00000001070a2011 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 17
14 核心基础 0x0000000107097f3c __CFRunLoopDoSources0 + 556
15 核心基础 0x00000001070973f3 __CFRunLoopRun + 867
16 核心基础 0x0000000107096e08 CFRunLoopRunSpecific + 488
17 图形服务 0x000000010b993ad2 GSEventRunModal + 161
18 UIKit 0x000000010799430d UIApplicationMain + 171
19 YEWADemo 0x0000000106c2cdfd 主 + 109
20 libdyld.dylib 0x000000010c27a92d 开始 + 1
21 ??? 0x0000000000000001 0x0 + 1
)
libc++abi.dylib:以 NSException
类型的未捕获异常终止
您的 mapCrossBtn
目标应该是 self
(通常是当前视图控制器),您的 topView
没有“close
”功能。
尝试改变:
mapCrossBtn.addTarget(topView, action: "close", forControlEvents: .TouchUpInside)
到
mapCrossBtn.addTarget(self, action: "close", forControlEvents: UIControlEvents.TouchUpInside)
我在 UIViewController
上创建了一个大小为 200x200 的自定义 MKMapView
来显示从当前位置到目标位置的路径。它显示位置和路径。但现在我想关闭这个 MKMapView
,我想看看我的 UIViewController
。
所以我在 MKMapView
的右上角创建了一个按钮,但我无法删除 MKMapView
。
我已经在按钮的操作上尝试了下面的代码。
func close() {
mapView!.removeFromSuperview()
}
我已经声明了这样的地图视图:
var mapView:MKMapView? = MKMapView()
然后我从 viewDidLoad() 中调用了一个方法 showMap(),如下所示:
func showMap() {
//Setup our Map View
mapView!.mapType = .Standard
mapView!.showsUserLocation = true
mapView!.frame = CGRectMake(topView.frame.origin.x, topView.frame.origin.y, topView.frame.size.width, topView.frame.size.height)
mapView!.delegate = self
view.addSubview(mapView!)
}
在此之后我这样调用了 showCloseButtonForMap():
func showCloseButtonForMap() {
let mapCrossBtn = UIButton()
mapCrossBtn.frame = CGRectMake(crossBtn.frame.origin.x+20, crossBtn.frame.origin.y+20, crossBtn.frame.size.width, crossBtn.frame.size.height)
if let image = UIImage(named: "X@2x.png") {
mapCrossBtn.setImage(image , forState: .Normal)
}
mapCrossBtn.backgroundColor = UIColor.blackColor()
mapCrossBtn.addTarget(topView, action: "close", forControlEvents: .TouchUpInside)
view.addSubview(mapCrossBtn)
}
这里的 crossBtn 是另一个现在隐藏的按钮。 任何帮助将不胜感激。
错误日志: 通信错误:{ count = 1, contents = "XPCErrorDescription" => { 长度 = 22,内容 = "Connection interrupted" } }>
2015-11-19 15:02:27.390 YEWADemo[2328:235956] -[UIView close]: 无法识别的选择器发送到实例 0x7fc6d0c32270 2015-11-19 15:02:27.408 YEWADemo[2328:235956] * 由于未捕获的异常终止应用程序 'NSInvalidArgumentException',原因:'-[UIView close]:无法识别的选择器发送到实例0x7fc6d0c32270' * 首先抛出调用栈: ( 0 CoreFoundation 0x0000000107175f45 exceptionPreprocess + 165 1 libobjc.A.dylib 0x0000000108e9cdeb objc_exception_throw + 48 2 CoreFoundation 0x000000010717e56d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205 3 核心基础 0x00000001070cbeea ___forwarding_ + 970 4 核心基础 0x00000001070cba98 _CF_forwarding_prep_0 + 120 5 UIKit 0x0000000107995e91 -[UIApplication sendAction:to:from:forEvent:] + 92 6 UIKit 0x0000000107b014d8 -[UIControl sendAction:to:forEvent:] + 67 7 UIKit 0x0000000107b017a4 -[UIControl _sendActionsForEvents:withEvent:] + 311 8 UIKit 0x0000000107b008d4 -[UIControl touchesEnded:withEvent:] + 601 9 UIKit 0x0000000107a03ed1 -[UIWindow _sendTouchesForEvent:] + 835 10 UIKit 0x0000000107a04c06 -[UIWindow 发送事件:] + 865 11 UIKit 0x00000001079b42fa -[UIApplication sendEvent:] + 263 12 UIKit 0x000000010798eabf _UIApplicationHandleEventQueue + 6844 13 核心基础 0x00000001070a2011 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 17 14 核心基础 0x0000000107097f3c __CFRunLoopDoSources0 + 556 15 核心基础 0x00000001070973f3 __CFRunLoopRun + 867 16 核心基础 0x0000000107096e08 CFRunLoopRunSpecific + 488 17 图形服务 0x000000010b993ad2 GSEventRunModal + 161 18 UIKit 0x000000010799430d UIApplicationMain + 171 19 YEWADemo 0x0000000106c2cdfd 主 + 109 20 libdyld.dylib 0x000000010c27a92d 开始 + 1 21 ??? 0x0000000000000001 0x0 + 1 ) libc++abi.dylib:以 NSException
类型的未捕获异常终止您的 mapCrossBtn
目标应该是 self
(通常是当前视图控制器),您的 topView
没有“close
”功能。
尝试改变:
mapCrossBtn.addTarget(topView, action: "close", forControlEvents: .TouchUpInside)
到
mapCrossBtn.addTarget(self, action: "close", forControlEvents: UIControlEvents.TouchUpInside)