mapView:regionDidChangeAnimated: 从未调用

Posted

技术标签:

【中文标题】mapView:regionDidChangeAnimated: 从未调用【英文标题】:mapView:regionDidChangeAnimated: never called 【发布时间】:2013-10-11 12:26:51 【问题描述】:

在故事板中,我有一个与视图控制器相关的导航控制器。

视图控制器包含一个 MKMapView。

View Controller 也在 Identity Inspector -> Custom Class 中设置为自定义控制器:MapViewController。

这是 MapViewController.h

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>
#import "MarkerAnnotation.h"
#import "MarkerButton.h"
#import "MainMapView.h"

@interface MapViewController : UITableViewController <MKMapViewDelegate, CLLocationManagerDelegate>

@property (weak, nonatomic) IBOutlet MKMapView *localMapView;

@end

localMapView 通过“引用插座”链接到故事板上 ViewController 中的 MKMapView,我已经在 .m 文件的代码中使用它来设置注释或获取“bounds.origin”。

每次用户移动地图时,我都需要运行一些行来更新地图。 因此,我尝试在 .m 文件上实现 mapView:regionDidChangeAnimated:,但从未调用过。

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated

    NSLog(@"Region changed");

我尝试创建 MKMapView 的自定义子类,在该类上实现该方法,但也没有被调用。 (你仍然可以在.h文件的导入中看到MainMapView.h...我仍然没有删除导入)

我有什么遗漏吗?我是否必须在地图和当前类之间设置更多连接?

否则,是否有另一种方法可以在每次地图移动时触发事件?

【问题讨论】:

除了引用出口,您是否还将地图视图的代理出口连接到文件所有者? 呃...不,我不这么认为^_^''我现在就试试 XD 酷,这很容易......现在自定义标记也出现了,我忘了它们。我开始在 ios 上开发才 10 天,这已经是我第二次犯这个错误了,希望我现在已经学会了 :) 非常感谢!如果您将其写为答案,我会确认;) 【参考方案1】:

当没有调用委托方法时,首先要检查的是对象的delegate 属性是否已设置或已连接。

(在 .h 文件中声明一个类实现了委托协议不是一回事——它只是让编译器知道类代码实现的预期内容,以便它可以提供编译时警告。)

所以除了引用出口之外,您还必须将地图视图的代理出口连接到文件所有者或在代码中(通常在 viewDidLoad 中)执行mapView.delegate = self;

【讨论】:

以上是关于mapView:regionDidChangeAnimated: 从未调用的主要内容,如果未能解决你的问题,请参考以下文章