忍者ブログ

Home > > IB不使用&オープンソースなiPadアプリ(テキストエディタ)を作る 第8回:内蔵ブラウザとメール送信

[PR]

  • 2024-12-04

Share on Tumblr このエントリーをはてなブックマークに追加

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Comments:

Trackback+Pingback:

Listed below are links to weblogs that reference
[PR] from Born Neet

Home > > IB不使用&オープンソースなiPadアプリ(テキストエディタ)を作る 第8回:内蔵ブラウザとメール送信

Home > Edhita > IB不使用&オープンソースなiPadアプリ(テキストエディタ)を作る 第8回:内蔵ブラウザとメール送信

IB不使用&オープンソースなiPadアプリ(テキストエディタ)を作る 第8回:内蔵ブラウザとメール送信

Share on Tumblr このエントリーをはてなブックマークに追加

第8回の今回は、編集中のファイルを
内蔵Webブラウザで表示&メール送信してみます。

当初予定していた目次からどんどん離れていきますが、
まぁいいでしょう。

今回の内容は非常に簡単なのでサクっといきます。

[参考]

基本的には、参考文献(第1回参照)だけで十分でしたが、
1点だけ、Stack Overflowにお世話になりました。
UISegmentedControlをToolbarに入れる時は、UIBarButtonItemでWrapしないといけないんですね…。

[素材]

引き続き、Soft * Accessory様の素材をお借りしています。

1. Webブラウザ

まずは内蔵ブラウザでのプレビュー機能。
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を非表示にしてますが、割愛します。)

2. メール送信

次はメール送信、こちらは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

PR

Comments:0

Comment Form

Trackback+Pingback:

TrackBack URL for this entry
Listed below are links to weblogs that reference
IB不使用&オープンソースなiPadアプリ(テキストエディタ)を作る 第8回:内蔵ブラウザとメール送信 from Born Neet

Home > Edhita > IB不使用&オープンソースなiPadアプリ(テキストエディタ)を作る 第8回:内蔵ブラウザとメール送信

Search
Loading
Feeds
Links
スポンサードリンク

Page Top