Wie ein benutzerdefiniertes iPhone UI-Element hinzuzufügen, das nicht eine IB-Komponente?
-
07-07-2019 - |
Frage
Ich versuche, eine Anwendung zu erstellen, die das iPhone MapView (unter Google Code) verwendet. Ich kann nicht herausfinden, wie man dieses Ding in meine Anwendung zu integrieren, ohne die gesamten UI Handschrift, dh nicht die IB überhaupt verwendet wird.
Wie kann ich den Interface Builder verwenden, um alle meine Menüs und so zu schaffen, sondern die MapView in hinzufügen? Muss ich die MapView bearbeiten es eine IB-Komponente zu machen?
Danke!
EDIT:
@pgb
Hier ist mein Code, es zeigt immer noch nur eine leere UIView, ich habe alles auf der IB Seite angeschlossen.
//
// 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
Lösung
Sie können sich wahrscheinlich die ganze Schnittstelle in IB erstellen, ein leeres UIView
als Platzhalter Ansicht hinzufügen und dann addSubview:
verwenden, um die MapView
Instanz zu der Ansicht Hierarchie hinzuzufügen.
Ihre Platzhalter Ansicht kann als IBOutlet
definiert werden, so dass Sie können dann die MapView
von Ihrer UIViewController
Instanz hinzufügen.
Andere Tipps
In IB Sie eine UIView hinzufügen und dann den Typ der zu jeder benutzerdefinierten UIView Ansicht ändern - ich gehe davon aus MapView Subklassen uiview wie MKMapView tut ...
Ich versuche, eine Anwendung zu erstellen, die das iPhone MapView (unter Google Code) verwendet.
Warum nicht MapKit benutzen? Sicherlich IB kommt mit einem MKMapView in seiner Bibliothek.