Загрузка / создание видов из NIB для GeoLocation - IOS и MapKit - PullRequest
0 голосов
/ 07 декабря 2011

У меня есть два класса - MapView и MapController.Основная идея заключается в том, чтобы сделать View общим объектом в шаблоне MVC.

  1. В MapView есть IBOutlet "mapView" для MKMapView, расположенный в MapNib.xib
  2. MapController содержит свойство "mapView", ссылающееся на класс MapView

Затем я пытаюсьустановить некоторые свойства MKMapView из контроллера, и он не реагирует на это в любом случае.Например, я пытаюсь в MapController:

self.mapView.mapView.showUserLocation = YES; // does not show blue point ...

Класс MapView:

@interface MapView : UIViewController

@property (nonatomic, retain) IBOutlet MKMapView *mapView;

...

//UINib *view = [UINib nibWithNibName:@"MapView" bundle:nil];
//[view instantiateWithOwner:self options:nil];

@end

Класс MapController:

@interface MapController : UIViewController<
    CLLocationManagerDelegate, 
    MKMapViewDelegate> 

@property (nonatomic, retain) MapModel *mapModel;
@property (nonatomic, retain) MapView *mapView;

...

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.mapView = [[[MapView alloc] init] autorelease];
    self.mapView.mapView.showsUserLocation = YES;

} @end

Я пытался сделать MapView подклассом UIView,UINib, UIViewcontroller, пытался загрузить NIB напрямую, используя UINib :: nibWithNibName, UIViewController :: initWithNibName, UIViewController :: loadNibNamed - это не имеет значения ... я вижу карту, но синяя точка не отображается в любом случае ... Зачем???У меня работает только одна комбинация - назвать NIB так же, как контроллер (MapController.xib) и добавить выход для MKMapView в качестве свойства контроллера ... кажется, что невозможно загрузить NIB / View в одном классе и использоватьэто в другом, я прав?

Каким-то образом это работает нормально:

@interface MapController : UIViewController

@property (nonatomic, retain) IBOutlet MKMapView *mapView;  // NIB was renamed to MapController.xib

...

@end

А потом в контроллере:

self.mapView.showUserLocation = YES; // now this shows blue dot ... why???

Спасибо, Art

1 Ответ

1 голос
/ 07 декабря 2011

IBOutlets не нужно создавать.NIB создает их и присваивает их вашим переменным, а вы перезаписываете его, выделяя и инициируя новый вид карты и сохраняя его в этой переменной

...