views:

612

answers:

3

I'm trying to create an application that uses the iPhone MapView (under Google Code). I can't figure out how to integrate this thing into my application without handwriting the entire UI, ie not using the IB at all.

How can I use the Interface builder to create all of my menus and such but add the MapView in? Do I need to edit the MapView to make it an IB component?

Thanks!

EDIT:

@pgb

Here is my code, it still just displays a blank UIView, I have connected everything up on the IB side.

//
//  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 FIGURED IT OUT THANGS PBG

A: 

I'm trying to create an application that uses the iPhone MapView (under Google Code).

Why not use MapKit? Surely IB comes with an MKMapView in its Library.

Peter Hosey
Because it can't do routing.
DevDevDev
+2  A: 

You can probably create the whole interface in IB, add an empty UIView as the placeholder view, and then use addSubview: to add the MapView instance to the view hierarchy.

Your placeholder view can be defined as an IBOutlet, so you can then add the MapView from your UIViewController instance.

pgb
This is exactly what I was thinking, but I'm not sure how to placeholder something like UIViewController.view["MapViewHolder"]How do I get access to the UIView which will hold it?
DevDevDev
Add an IBOutlet variable declaration in the `@interface` of the class that your file's owner is an instance of, and connect that outlet to the empty view.
Peter Hosey
+1  A: 

In IB you can add a UIView and then change the type of the view to any custom UIView - I'm assuming MapView subclasses UIView just as MKMapView does...

Kendall Helmstetter Gelner
Can you explain please? So I would have my IBOutlet UIView* mapView. Then somewhere along the line put something like mapView = [MapView alloc]?
DevDevDev
You don't need to alloc anything. You would have the IBOutlet be of type MapView (so IBOutlet MapView *mapView) then when the view controller was created with the xib you used, the MapView would be created automatically (note that it has to support construction without arguments, which I can't see why it would not).
Kendall Helmstetter Gelner