2009-09-14 5 views
1

J'essaie de créer une application qui utilise l'iPhone MapView (sous Google Code). Je ne peux pas comprendre comment intégrer cette chose dans mon application sans écrire l'intégralité de l'interface utilisateur, c'est-à-dire ne pas utiliser l'IB du tout.Comment ajouter un élément d'interface utilisateur iPhone personnalisé qui n'est pas un composant IB?

Comment puis-je utiliser le générateur d'interface pour créer tous mes menus et autres mais ajouter le MapView? Ai-je besoin d'éditer le MapView pour en faire un composant IB?

Merci!

EDIT:

@pgb

Voici mon code, il affiche toujours juste un UIView vide, j'ai branché tout sur le côté IB.

// 
// NewTestViewController.h 
// NewTest 
// 

#import <UIKit/UIKit.h> 

@interface NewTestViewController : UIViewController { 
UIView* mapPlaceholder; 

} 
@property (nonatomic, retain) IBOutlet UIView* mapPlaceholder; 
@end 

// 
// NewTestViewController.m 
// NewTest 
// 

#import "NewTestViewController.h" 
#import "MapView.h" 

@implementation NewTestViewController 
@synthesize mapPlaceholder; 



// The designated initializer. Override to perform setup that is required before the view is loaded. 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { 
     MapView *mapView = [[[MapView alloc] initWithFrame: 
     [[UIScreen mainScreen] applicationFrame]] autorelease]; 
    [mapPlaceholder addSubview:mapView]; 
    } 
    return self; 
} 


/* 
// Implement loadView to create a view hierarchy programmatically, without using a nib. 
- (void)loadView { 
} 
*/ 


/* 
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
} 
*/ 


/* 
// Override to allow orientations other than the default portrait orientation. 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 
*/ 

- (void)didReceiveMemoryWarning { 
// Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

// Release any cached data, images, etc that aren't in use. 
} 

- (void)viewDidUnload { 
// Release any retained subviews of the main view. 
// e.g. self.myOutlet = nil; 
} 


- (void)dealloc { 
[mapPlaceholder.subviews release]; 
    [super dealloc]; 
} 

@end 

NEVERMIND IT OUT thangs FIGURED PBG

Répondre

2

Vous pouvez probablement créer l'interface tout en IB, ajouter un UIView vide comme la vue de l'espace réservé, puis utilisez addSubview: ajouter l'instance MapView à la hiérarchie de la vue.

Votre vue de l'espace réservé peut être définie comme IBOutlet, vous pouvez donc ajouter le MapView à partir de votre instance UIViewController.

+0

C'est exactement ce que je pensais, mais je ne suis pas sûr comment un espace réservé quelque chose comme UIViewController.view ["MapViewHolder"] Comment puis-je accéder à l'UIView qui le tiendra? – DevDevDev

+0

Ajoutez une déclaration de variable IBOutlet dans l'interface @ de la classe dont le propriétaire est une instance et connectez cette sortie à la vue vide. –

0

Je suis en train de créer une application qui utilise l'iPhone MapView (sous Google Code).

Pourquoi ne pas utiliser MapKit? Sûrement IB vient avec un MKMapView dans sa bibliothèque.

+0

Parce qu'il ne peut pas faire du routage. – DevDevDev

1

Dans IB, vous pouvez ajouter un UIView puis changer le type de vue de toute UIView sur mesure - Je suppose que les sous-classes de MapView UIView comme MKMapView ne ...

+0

Pouvez-vous expliquer s'il vous plaît? Donc, j'aurais mon IBOutlet UIView * mapView. Puis quelque part le long de la ligne mettre quelque chose comme mapView = [MapView alloc]? – DevDevDev

+0

Il n'est pas nécessaire d'allouer quoi que ce soit. Vous auriez IBOutlet être de type MapView (donc IBOutlet MapView * mapView) puis quand le contrôleur de vue a été créé avec le xib que vous avez utilisé, le MapView serait créé automatiquement (notez qu'il doit supporter la construction sans arguments, ce que je peux ' Je ne vois pas pourquoi ça ne marcherait pas). –

Questions connexes