2013-10-11 4 views
0

В раскадровке у меня есть контроллер навигации в отношении с контроллером представления.mapView: regionDidChangeAnimated: never called

Контроллер просмотра содержит MKMapView.

Контроллер просмотра также установлен в 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 связан с MKMapView помещенного в ViewController на раскадровке через «REFERENCING Outlets», и я использую его уже в коде на .m файл для такие вещи, как установка аннотаций или получение «bounds.origin».

Каждый раз, когда пользователь перемещает карту, мне нужно запустить некоторые строки, чтобы обновить карту. Итак, я попытался реализовать mapView: regionDidChangeAnimated: в файле .m, но это никогда не вызывается.

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated 
{ 
    NSLog(@"Region changed"); 
} 

Я попытался создать собственный подкласс MKMapView, реализующий этот класс, но не был вызван. (вы все еще можете видеть в импорте файла .h, MainMapView.h ... Я все еще не удалял импорт)

Есть ли что-то, что мне не хватает? Должен ли я установить еще какое-то соединение между картой и текущим классом?

В противном случае, есть ли другой способ я могу вызвать событие каждый раз, когда карта перемещается?

+3

В дополнение к ссылочной розетке вы также подключили выход делегата карты к файловому владельцу? – Anna

+0

erm ... нет, я так не думаю^_^'' Я попробую сейчас – BkdD

+0

XD coool, это было довольно просто ... также появились пользовательские маркеры, я забыл о них. Это всего лишь 10 дней, когда я начал развиваться на iOS, и уже второй раз я делаю эту ошибку, надеюсь, что узнал сейчас :) Спасибо большое! Если вы напишете это как ответ, я подтвержу это;) – BkdD

ответ

5

Когда методы делегата не вызываются, необходимо проверить, установлено или нет свойство объекта delegate.

(Объявление о том, что класс реализует протокол делегата в файле .h, не то же самое, что позволяет компилятору знать, чего следует ожидать от реализации кода класса, чтобы он мог предоставлять предупреждения во время компиляции).

В дополнение к референсной розетке вы также должны подключить выход делегата карты к файловому владельцу или в коде (обычно в режиме просмотраDidLoad) mapView.delegate = self;.

Смежные вопросы