Zusammenspiel mit anderen Applikationen
URLs öffnen
NSURL* url = [NSURL URLWithString:@"http://www.iphonetraining.de/"];
[[UIApplication sharedApplication] openURL:url];
URL-Schemata
mailto:o.mustermann@example.comtel:+49-351-1234567sms:+49-151-1234567sms:http://maps.google.com/maps?daddr=Hamburg%20Jungfernstieg&z=15http://maps.google.com/maps?ll=53.55372,9.992065&spn=0.1http://www.youtube.com/v/VIDEO_IDENTIFIERhttp://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=156093464&id=156093462&s=143441(siehe iTunes Link Maker)
Browser einbetten mit UIWebView
UIWebView* browser = [[[UIWebView alloc] initWithFrame:self.view.bounds] autorelease];
// UIWebView.scalesPageToFit: Web-Page einpassen und Zoomen erlauben, wenn YES
browser.scalesPageToFit = YES;
// UIView.autoresizingMask: Browser mit dem Parent-View mitskalieren
browser.autoresizingMask = (UIViewAutoresizingFlexibleWidth
| UIViewAutoresizingFlexibleHeight);
[browser loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
[self.view addSubview: browser];
Interaktion mit UIWebView I
-
Interaktion
Anwendung → Browser:
loadHTMLString,stringByEvaluatingJavaScriptFromString -
Interaktion
Browser → Anwendung:
URL-Schemata mitUIWebViewDelegatewebView:shouldStartLoadWithRequest:navigationTypebehandeln- (void) setupBrowser { UIWebView* browser = [[UIWebView alloc] initWithFrame:self.view.bounds]; NSString* html = @"<a href=\"myapp:example\" id=\"link\">test</a>"; [browser loadHTMLString:html baseURL:nil]; browser.delegate = self; [self.view addSubview: browser]; [browser release]; }
Interaktion mit UIWebView II (UIWebViewDelegate)
- (BOOL) webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType {
if ([@"myapp" isEqualToString:[[request URL] scheme]]) {
NSString* query = [[request URL] resourceSpecifier];
NSString* js = [NSString stringWithFormat:
@"document.getElementById('link').innerHTML = '%@'", query];
NSString* result = [webView stringByEvaluatingJavaScriptFromString:js];
NSLog(@"result: %@", result);
return NO;
}
return YES;
}
Eigene URL-Schemata I
-
URL-Schemata werden im
Info.plistangegeben:
Eigene URL-Schemata II
-
Aufrufe mit dem URL-Schema werden vom
UIApplicationDelegatebehandelt:- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*) url { if (!url) { return NO; } NSLog(@"URL request: %@", url); return YES; }
-
WICHTIG: URLs sollten sehr strikt validiert werden, da sonst Sicherheitslücken verursacht werden können!
Adressbuch API
- (void) showAddressBook {
UIViewController* picker = [[ABPeoplePickerNavigationController alloc] init];
picker.peoplePickerDelegate = self;
[self presentModalViewController:picker animated:YES];
[picker release];
}
- (BOOL) peoplePickerNavigationController:
(ABPeoplePickerNavigationController *)peoplePicker
shouldContinueAfterSelectingPerson:(ABRecordRef)person {
// Rückgabewerte von ...Copy... müssen mit CFRelease freigegeben werden
NSString* friendlyName = (NSString*) ABRecordCopyCompositeName(person);
ABMultiValueRef emailrecord = ABRecordCopyValue(person, kABPersonEmailProperty);
NSArray *emailaddresses = (NSArray*) ABMultiValueCopyArrayOfAllValues(emailrecord);
[self dismissModalViewControllerAnimated:YES];
return NO;
}
E-Mails versenden
MFMailComposeViewControlleraus demMessageUI-Framework erlaubt das Versenden von E-Mails aus der Anwendung.- Alternativ per openURL
mailto:johnq@example.com?subject=Hello world&body=MessageBody. - Siehe Beispielanwendung
MailComposer.
Kamera / Bildauswahl I: UIImagePickerController
- (void) openPhotoPickerWithCamera {
UIImagePickerController* imagePicker = [[UIImagePickerController alloc] init];
if ([UIImagePickerController isSourceTypeAvailable:
UIImagePickerControllerSourceTypeCamera]) {
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
}
else if ([UIImagePickerController isSourceTypeAvailable:
UIImagePickerControllerSourceTypePhotoLibrary]) {
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
}
imagePicker.delegate = self;
imagePicker.allowsEditing = YES;
imagePicker.navigationBar.barStyle = UIBarStyleBlackTranslucent;
[self.navigationController presentModalViewController:imagePicker animated:YES];
}
Kamera / Bildauswahl II: UIImagePickerControllerDelegate
- (void) imagePickerController:(UIImagePickerController *)picker
didFinishPickingImage:(UIImage *)image
editingInfo:(NSDictionary *)editingInfo {
NSData* imageData = UIImageJPEGRepresentation(image, 0.8);
[picker dismissModalViewControllerAnimated:YES];
}
- (void) imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[picker dismissModalViewControllerAnimated:YES];
}
Kamera / Bildauswahl III: Skalieren und Speichern eines Bildes
CGSize destSize = CGSizeMake(100, 100);
UIGraphicsBeginImageContext(destSize);
[image drawInRect:CGRectMake(0, 0, destSize.width, destSize.height)];
UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData* jpegImageData = UIImageJPEGRepresentation(smallImage, 0.8);

