|
Июл
28
|
В первой части посвященной SDK iPhone 3.0 серии мы рассмотрели принцип внедрения в приложения iPhone менеджера отмены действий “NSUndoManager” и собственно отмену/повтор с помощью встряски.
В этот раз добавим к простейшему приложению iPhone встроенную возможность отправки электронных сообщений — с помощью предусмотренного в новой версии фреймворка “MessageUI“.
Теоретически, ни отправка электронных сообщений, ни “MessageUI” сами по себе новинкой не являются. До выхода версии 3.0 у “MessageUI” был свой частный фреймворк, а из приложений можно отправлять сообщения через “mailto:// URLs” (хотя возможности функции были ограничены). Теперь же опция отправки стала не только полнофункциональной, но и удобной в работе.
Мы начнем с рабочего кода для простого приложения: интерфейс будет включать всего одну кнопку. Добавим код с выводом по нажатию кнопки предложения о создании сообщения, возможностью предварительного заполнения поля “subject” и содержимого.
Исходный код/GitHub
Код к уроку http://github.com/dcgrigsby/InAppEmail/tree/ можно найти на GitHub. Чтобы загрузить себе копию, создайте клон репозитория.
Откройте терминал и переключитесь на директорию, куда планируете поместить код.
Выполните клонирование, набрав git clone git://github.com/dcgrigsby/InAppEmail.gitt
По ссылке вы найдете две отдельные версии — начальную, без опций отмены/повтора, и конечную, уже с ними. Тем, кто намерен проанализировать урок в пошаговом режиме, предлагаю воспользоваться первым вариантом.
В исходной папке
Введите git checkout 0019071d855e6d3a9f263b8a02d9c7d93dc5dcd2
О проекте
InAppEmail — максимально простое для создания приложение. Единственная наличествующая кнопка “Send Email“, которая пока отключена, при нажатии запускает сообщение “buttonPressed“.
Добавляем фреймворк “MessageUI”
В составе фреймворка “MessageUI” разработчики из Apple предлагают нам готовый интерфейс для создания сообщений “MFMailComposeViewController“. Для работы с ним к проекту необходимо добавить фреймворк “MessageUI“.
На панели проекта “Groups & Files” разверните опцию “InAppEmail”
Правой кнопкой мыши или удерживая нажатой клавишу <Ctrl>, щелкните на папке “Frameworks“.
Выполните “Add > Existing Frameworks…“.
Разверните содержимое папки “Frameworks“.
Выберите “MessageUI.framework” и щелкните на кнопке “Add“.
Снова щелкните на кнопке “Add“.
Следующим шагом импортируем фреймворк в заголовочный файл.
К файлу “InAppEmailViewController.h” добавьте “#import <MessageUI/MessageUI.h>“.
Отображение интерфейса “MFMailComposeViewController”
Как и любой другой контроллер представления, “MFMailComposeViewController” позволяет задействовать “presentModalViewController” из класса “InAppEmailViewController” для модального вывода на экран “скольжением”.
Метод “puttonPressed” в файле “InAppEmailController.m” заменяем приведенным ниже фрагментом:
1 2 3 4 5 6 7 | - (IBAction)buttonPressed { MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init]; [controller setSubject:@"In app email..."]; [controller setMessageBody:@"...a tutorial from mobileorchard.com" isHTML:NO]; [self presentModalViewController:controller animated:YES]; [controller release]; } |
Пока запускать приложение не советую, дабы не разочароваться: кнопка сообщения “Send Email” все еще отключена. Активировать ее просто, но этим мы займемся после того, как настроим iPhone или iPod, на котором работает приложение, под отправку электронных сообщений. Для этого к файлу “InAppEmailViewController.m” добавляем код метода “aviewDidLoad“.
1 2 3 4 | - (void)viewDidLoad { if ([MFMailComposeViewController canSendMail]) button.enabled = YES; } |
Освобождаем интерфейс “MFMailComposeViewController”
Мы практически закончили. Запустив приложение теперь, увидим практически рабочий вариант: щелчок на кнопке вызывает интерфейс создания сообщения с образцом. Осталось добавить в поле “To” нужный адрес — и все будет готово. Ну, или почти готово.
Не хватает одной детали: нужно знать, когда освобождать интерфейс создания сообщений. Для этой цели протокол “MFMailComposeViewControllerDelegate” предусматривает механизм обратного вызова.
Для получения внешнего вызова необходимо:
Адаптировать протокол в “InAppEmailViewController“.
Настроить себя в качестве делегата для получения внешних вызовов.
Внедрить метод внешнего вызова.
Для адаптации протокола отредактируйте файл “InAppEmailViewController.h” (изменения выделены черным):
1 2 3 4 5 6 7 8 9 10 | #import @interface InAppEmailViewController : UIViewController MFMailComposeViewControllerDelegate; { IBOutlet UIButton *button; } - (IBAction)buttonPressed; @end |
Чтобы настроить себя в качестве делегата для получения внешних вызовов, обновите метод “buttonPressed” в файле “InAppEmailViewController.m” (изменения выделены черным):
1 2 3 4 5 6 7 8 | - (IBAction)buttonPressed { MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init]; controller.mailComposeDelegate = self; [controller setSubject:@"In app email..."]; [controller setMessageBody:@"...a tutorial from mobileorchard.com" isHTML:NO]; [self presentModalViewController:controller animated:YES]; [controller release]; } |
Последним шагом внедряем метод обратного вызова. К файлу “InAppEmailViewController.m” добавьте приведенный ниже код для метода “mailComposeController:didFinishWithResult:error:“.
1 2 3 4 | - (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { [self becomeFirstResponder]; [self dismissModalViewControllerAnimated:YES]; } |
Заключение
Мы рассмотрели исключительно основы. Урок не затрагивает ни указания получателей, ни добавления вложений, ни создания HTML сообщений — все это не представит сложностей для тех, кто освоил принципы.
Упомянем лишь одно ограничение: заставить пользователя отправить сообщение невозможно — у него всегда остается возможность воспользоваться кнопкой отмены.



Последние комментарии
ошибка...
Не могу понять куда вставлять [self...
очень круто )))) спасибо ))))
действительно ничерта не понятно,...
Разве размер сторон текстур не должен...