从 UIViewController 中删除我的自定义 MKMapView

Posted

技术标签:

【中文标题】从 UIViewController 中删除我的自定义 MKMapView【英文标题】:Remove My Custom MKMapView from UIViewController 【发布时间】:2015-11-19 08:26:58 【问题描述】:

我在 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, 内容 = "连接中断" >

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 关闭]:无法识别的选择器发送到实例 0x7fc6d0c32270” * 首先抛出调用栈: ( 0 CoreFoundation 0x0000000107175f45 异常预处理+ 165 1 libobjc.A.dylib 0x0000000108e9cdeb objc_exception_throw + 48 2核心基础0x000000010717e56d-[NSObject(NSObject)不识别选择器:]+205 3 核心基础 0x00000001070cbea ___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 发送事件:] + 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 类型的未捕获异常终止

【问题讨论】:

如何添加mapView,请出示您的代码 close 函数被调用了吗? 是的,但这是我得到的错误日志 【参考方案1】:

你的mapCrossBtn 目标应该是self(通常是当前视图控制器),你的topView 没有'close' 功能。 尝试改变:

  mapCrossBtn.addTarget(topView, action: "close", forControlEvents: .TouchUpInside)

mapCrossBtn.addTarget(self, action: "close", forControlEvents: UIControlEvents.TouchUpInside)

【讨论】:

没关系,它仍在关闭函数中,但我应该在关闭函数中写什么,因为 mapView!.removeFromSuperview() 不起作用并给出错误。 mapView!.removeFromSuperview() 它没有问题。您只需更改按钮目标即可。如果有任何错误粘贴它。

以上是关于从 UIViewController 中删除我的自定义 MKMapView的主要内容,如果未能解决你的问题,请参考以下文章

从 uiviewcontroller 中删除标签栏控制器

从 UIViewController 类中隐藏自定义视图 UIButton

从 UIHostingViewController 呈现 UIViewController

rightBarButtonItem.enabled 从 uinavigationbar 中删除我的自定义层

显示没有 UIViewController 的 UIView

在不覆盖全屏的 UIViewController 中模态显示 UIViewController