Tweet
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
- Newer: Macでvsftpd
- Older: IB不使用&オープンソースなiPadアプリ(テキストエディタ)を作る 第7回:AdMob
Home > > IB不使用&オープンソースなiPadアプリ(テキストエディタ)を作る 第8回:内蔵ブラウザとメール送信
Tweet
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
Home > > IB不使用&オープンソースなiPadアプリ(テキストエディタ)を作る 第8回:内蔵ブラウザとメール送信
Home > Edhita > IB不使用&オープンソースなiPadアプリ(テキストエディタ)を作る 第8回:内蔵ブラウザとメール送信
Tweet
第8回の今回は、編集中のファイルを
内蔵Webブラウザで表示&メール送信してみます。
当初予定していた目次からどんどん離れていきますが、
まぁいいでしょう。
今回の内容は非常に簡単なのでサクっといきます。
基本的には、参考文献(第1回参照)だけで十分でしたが、
1点だけ、Stack Overflowにお世話になりました。
UISegmentedControlをToolbarに入れる時は、UIBarButtonItemでWrapしないといけないんですね…。
引き続き、Soft * Accessory様の素材をお借りしています。
まずは内蔵ブラウザでのプレビュー機能。
UISegmentedControlでSource/Browserを選択して切り替えます。
というわけでやることは、DetailViewControllerのinitでボタンを追加して、
ブラウザを開くメソッドを作るだけです。
// SegmentedControlの作成
UISegmentedControl *segment = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Source", @"Browser", nil]];
segment.segmentedControlStyle = UISegmentedControlStyleBar;
segment.selectedSegmentIndex = 0;
[segment addTarget:self action:@selector(segmentDidPush:) forControlEvents:UIControlEventValueChanged];
// Toolbarに入れる為にUIBarButtonでWrap
UIBarButtonItem *segmentButton = [[UIBarButtonItem alloc] initWithCustomView:segment];
// Toolbarに設定
NSArray *items = [NSArray arrayWithObjects:flexible, undoButton, redoButton, fixed, leftButton, rightButton, flexible, segmentButton, nil];
[toolbar setItems:items];
// SegmentedControlが変化した時に呼ばれる
- (void)segmentDidPush:(UISegmentedControl *)sender {
// 0ならソース
if (0 == sender.selectedSegmentIndex) {
webView_.hidden = YES;
}
// 1ならブラウザ
else if (1 == sender.selectedSegmentIndex) {
[self saveContents];
[self changeUrl];
webView_.hidden = NO;
}
}
// WebViewでファイルを開く
- (void)changeUrl {
webViewReloaded = NO;
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
// <meta charset="UTF-8" />しないと文字化けする
NSURL *url = [NSURL fileURLWithPath:path_];
NSURLRequest *req = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60];
[webView_ loadRequest:req];
}
これだけでWebViewでローカルファイルを開けます。簡単ですね。
(UIWebViewDelegateを実装して、読み込み完了後にIndicatorを非表示にしてますが、割愛します。)
次はメール送信、こちらはWebViewでの表示以上に簡単です。
MessageUIフレームワークをimportして、MFMailComposeViewControllerにメール処理をしてもらうだけです。
// DetailVIewController.h
#import <MessageUI/MessageUI.h>
@interface DetailViewController : UIViewController <UIPopoverControllerDelegate, UISplitViewControllerDelegate, UIWebViewDelegate, MFMailComposeViewControllerDelegate> {
// DetailVIewController.m
// メールボタン追加
UIBarButtonItem *mailButton = [[UIBarButtonItem alloc] initWithTitle:@"Mail" style:UIBarButtonItemStyleBordered target:self action:@selector(mailDidPush)];
NSArray *items = [NSArray arrayWithObjects:flexible, undoButton, redoButton, fixed, leftButton, rightButton, flexible, segmentButton, fixed, mailButton, nil];
[toolbar setItems:items];
// メールボタンから呼ばれる
- (void)mailDidPush {
if ([MFMailComposeViewController canSendMail]) {
MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init];
// delegateじゃなくmailComposeDelegate
// delegateにするとUINavigationViewControllerDelegateを実装してないって怒られる
mailViewController.mailComposeDelegate = self;
// 本文&添付
NSData *data = [NSData dataWithContentsOfFile:path_];
[mailViewController setSubject:[path_ lastPathComponent]];
[mailViewController setMessageBody:textView_.text isHTML:NO];
// とりあえず全部plain textとして扱っちゃう
[mailViewController addAttachmentData:data mimeType:@"text/plain" fileName:[path_ lastPathComponent]];
[self presentModalViewController:mailViewController animated:YES];
}
}
// 処理が終わったら非表示にする
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
[controller dismissModalViewControllerAnimated:YES];
}
いい感じです。
いかがだったでしょうか?
だいぶ見栄えもよくなってきたのでは、と自画自賛しています。
まだ細かいバグが残ってるので、
その辺りを調整してリリース申請してみようかと思います。
それでは、次回もご期待下さい。
今回のコードは「Edhita8.zip」に入っています。
GitHubのdownloadページからダウンロードして下さい。
Downloads for tnantoka's Edhita - GitHub
Home > Edhita > IB不使用&オープンソースなiPadアプリ(テキストエディタ)を作る 第8回:内蔵ブラウザとメール送信