この記事を書いた人:

【Xcode】ノートメールアプリを開発してみよう(Part2)

iPhoneアプリ開発

みなさんこんにちは。Yuta Fujii(@HofuCamera)です。

前回の記事から2回に渡って「ノートメールアプリ」を開発しています。

このアプリは文字を打ち込んで、そのままメールで送信するiPhoneアプリになっています。
今回は、メール送信画面の立ち上げ、入力したテキストの反映、送信というところまで開発していきたいと思います!

今回でノートメールに関しては完結します。それでは作っていきましょう!(Xcodeをまだインストールされていない方はこちらから)

メール画面を使う準備をする

フレームワークを準備しよう

それでは作っていきたいと思います。
まずは、メール画面を使う準備をしていきたいと思います。
左上のnoteMailをクリックします。
Xcode_mail1
次に下へスクロールしていきます。
Xcode_mail2
すると1番下にプラスボタンがあるのでそこをタップします。
フレームワークを追加する際は、ここから追加していくことになります。
Xcode_mail3
「MessageUI」というフレームワークを検索してAddボタンを押して完了となります。
フレームワークについて説明していきます。
Xcode_mail4
Xcode_mail5
Xcodeでは、はじめから準備されているプログラム(画面が表示されたときに呼ばれるviewDidLoadなど)は別のフレームワークがすでに準備された状態でプロジェクトがスタートします。

ただ、新しく何かしたい(例えばメール画面を呼びたい、SNSへ投稿したい)場合などはこのように別のフレームワークを準備していく必要があります。

フレームワークとは武器屋さんだと思っていただいて構いません。

どういうことかというと、まず何かをしたい(今回であればメール画面を立ち上げたい)場合、メール画面をデザインから1からつくって送信するための処理を作ってということをしていくと、非常に時間がかかりかつ複雑なことを行っていかなければなりません。

そのため、1からつくるのではなく、それの機能がはじめから準備されているものを装着するだけで使用しようとしたほうが早いのです。

つまり、ここでいうとMessageUIというフレームワークを取り入れることで「メールを立ち上げて、送信する」ということを簡単に行うことができるようになります。
大切なのは、何がしたくてどこにそのコードを書かなければならないのかの見極め(つまり、どのフレームワークを取り込めばいいのか)になっていきます。

それではこのフレームワークの使い方に関してみていきたいと思います。

メール送信画面を呼び出す準備をしよう

デリゲートメソッドを準備する

まず、これまででフレームワークをプロジェクトに取り込むことはできたのですが、まだプログラムに認識させる(使用しますよ)ということをしていません。

なので、これから認識させていきたいと思います。

まず、下記のようにViewController.mの先頭部分に該当のフレームワークを取り込む記述をします。これをインポートするといいます。

#import
Xcode_mail6
次に、それらが持つメソッド(前回であればTextViewがもつメソッド)をつかうために宣言をすることをしなければいけません。

やり方は簡単で下記のように記述します。

Xcode_mail7
これでMessageUIというフレームワークがもつメソッドをしようする準備ができました。

次は、「メール画面を立ち上げる」という「ボタン」を作っていきたいと思います。

まずは、画面にボタンをおきます。右側からドラッグ&ドロップをして設置します。
Xcode_mail8

そして、Buttonとかいてあるので、ここでダブルクリックをして「送信」という文字に変更します。
Xcode_mail9
Xcode_mail10

ただ、このままではボタンがわかりづらいので、ボタンに色をつけていきます。

赤い部分をクリックしてBackgroundという箇所で「白」を選択します。これでわかりやすくなりました。

Xcode_mail11

次は、ボタンを押したときの処理を書く場所を準備します。

ボタンを選択して、controlを押しながらプログラムの方へドラッグ&ドロップします。

そしてsendという名前をつけます。Xcode_mail12
Xcode_mail13
Xcode_mail14

メールを起動するプログラムを書いていきます。
書き方は以下になります。


    //メールを起動する準備をする
    MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init];
   //デリゲートメソッドを使えるようにする
    mc.mailComposeDelegate = self;
    //件名を入れておく(この場合はメモ)
    [mc setSubject:@"メモ"];
    //本文を入れる(この場合はnoteTextViewの本文)
    [mc setMessageBody:noteTextView.text isHTML:NO];
    
    //メール画面の立ち上げ
    [self presentViewController:mc animated:YES completion:nil];

以上のコードをsend内に書くことで「送信ボタンを押すと」メール画面を呼び出すことができます。
Xcode_mail17

まず
MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init];
で、「メールを起動する準備」をします。

次に、
mc.mailComposeDelegate = self;
で、「デリゲートメソッドを使えるよう」にします。

また、 下記のコードで件名を入れておくことができます。(この場合はメモ)
[mc setSubject:@”メモ”];

そして本文を入れます(この場合はnoteTextViewの本文)
[mc setMessageBody:noteTextView.text isHTML:NO];

最後にメール画面を立ち上げます。
[self presentViewController:mc animated:YES completion:nil];

以上で完了です。

また、メールを送信した後にメールの画面を閉じなければなりません。ここでデリゲートメソッドを使っていくことになります。


    - (void)mailComposeController:( MFMailComposeViewController* )controller didFinishWithResult:( MFMailComposeResult )result error:( NSError* )error
{
   [controller dismissViewControllerAnimated:YES completion:nil];
    
    return;
}

ここでいうと
[controller dismissViewControllerAnimated:YES completion:nil];
が閉じるコードになります。

このメソッドの中身はメール画面のボタンをタップしたときに呼ばれます。
Xcode_mail16

シミュレーターで確認してみよう

それでは左上の▶ボタンを押してビルドしてみましょう!このように「あいうえお」といれました。

Xcodemailz
もしtextViewの中に文字が何も入っていない場合は本文も何も入っていない状態からスタートになります。

Xcodemailzz

最後に

いかがでしたか?

フレームワークの使い方や概念が、多少理解できてきたかと思います。

次は「【Xcode】スロットiPhoneアプリを開発してみよう」を行っていきたいと思います!

この記事が気に入ったら
いいね!しよう

creiveの最新情報をお届けします

この記事を書いた人

yuta
知識ゼロからプロのInstagram風画像加工iPhoneアプリを作る 特別クーポン配布中! 詳しくはこちらから! エンジニアでプロデューサー ピーターティールが大好きです! Twitter:Yuta Fujii 質問はお気軽にどうぞ!