Я использую пример приложения MailComposer Apple для отправки электронного письма из моего приложения (ОС 3,0 функциональности). Действительно ли возможно установить На, Предмет или поля Body как первый респондент с MFMailComposeViewController?
Другими словами, поведение было бы: пользователь нажимает кнопку, которая представляет почтовое представление (presentModalViewController). Когда почтовое представление представлено, курсор установлен в одно из полей, и клавиатура открывается.
Я замечаю, что в документации MFMailComposeViewController говорится:
"Важный: сам почтовый интерфейс состава не настраиваем и не должен быть изменен Вашим приложением. Кроме того, после представления интерфейса, Вашему приложению не позволяют внести дальнейшие изменения в почтовое содержание. Пользователь может все еще отредактировать содержание с помощью интерфейса, но программные изменения проигнорированы. Таким образом необходимо установить значения полей содержания прежде, чем представить интерфейс".
Однако я не забочусь о настройке интерфейса. Я просто хочу установить это firstResponder. Какие-либо идеи?
Вы можете попробовать просто вызвать статьFirstResponder на самом контроллере. Если это не сработает, вы можете попробовать в отладчике получить список подпредставлений представления составления почты, пока не найдете знакомое текстовое поле или текстовое представление, которое затем можно специально кодировать для установки статуса респондента в коде, который может выглядеть примерно так: это (не знаю, сработает ли это, но это пример):
[[[[mailcomposer.view.subviews objectAtIndex:3] subviews] objectAtIndex:2] becomeFirstResponder]
Вы можете заставить эти поля стать первым ответчиком.
если вы добавите следующий метод в свой класс...
//Returns true if the ToAddress field was found any of the sub views and made first responder
//passing in @"MFComposeSubjectView" as the value for field makes the subject become first responder
//passing in @"MFComposeTextContentView" as the value for field makes the body become first responder
//passing in @"RecipientTextField" as the value for field makes the to address field become first responder
- (BOOL) setMFMailFieldAsFirstResponder:(UIView*)view mfMailField:(NSString*)field{
for (UIView *subview in view.subviews) {
NSString *className = [NSString stringWithFormat:@"%@", [subview class]];
if ([className isEqualToString:field])
{
//Found the sub view we need to set as first responder
[subview becomeFirstResponder];
return YES;
}
if ([subview.subviews count] > 0) {
if ([self setMFMailFieldAsFirstResponder:subview mfMailField:field]){
//Field was found and made first responder in a subview
return YES;
}
}
}
//field not found in this view.
return NO;
}
Затем, после того как вы представите MFMailComposeViewController, передайте представление MFMailComposeViewController в функцию вместе с полем, которое вы хотите сделать первым реагирующим.
MFMailComposeViewController *mailComposer = [[MFMailComposeViewController alloc] init];
mailComposer.mailComposeDelegate = self;
/*Set up the mail composer*/
[self presentModalViewController:mailComposer animated:YES];
[self setMFMailFieldAsFirstResponder:mailComposer.view mfMailField:@"RecipientTextField"];
[mailComposer release];