0

在情节提要中,我有一个与视图控制器相关的导航控制器。

视图控制器包含一个 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 ......我仍然没有删除导入)

有什么我想念的吗?我是否必须在地图和当前班级之间设置更多连接?

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

4

1 回答 1

5

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

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

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

于 2013-10-11T13:01:54.810 回答