Набор первый респондент в MFMailComposeViewController?

Я использую пример приложения MailComposer Apple для отправки электронного письма из моего приложения (ОС 3,0 функциональности). Действительно ли возможно установить На, Предмет или поля Body как первый респондент с MFMailComposeViewController?

Другими словами, поведение было бы: пользователь нажимает кнопку, которая представляет почтовое представление (presentModalViewController). Когда почтовое представление представлено, курсор установлен в одно из полей, и клавиатура открывается.

Я замечаю, что в документации MFMailComposeViewController говорится:

"Важный: сам почтовый интерфейс состава не настраиваем и не должен быть изменен Вашим приложением. Кроме того, после представления интерфейса, Вашему приложению не позволяют внести дальнейшие изменения в почтовое содержание. Пользователь может все еще отредактировать содержание с помощью интерфейса, но программные изменения проигнорированы. Таким образом необходимо установить значения полей содержания прежде, чем представить интерфейс".

Однако я не забочусь о настройке интерфейса. Я просто хочу установить это firstResponder. Какие-либо идеи?

6
задан crestronfanatic 6 November 2009 в 20:42
поделиться

2 ответа

Вы можете попробовать просто вызвать статьFirstResponder на самом контроллере. Если это не сработает, вы можете попробовать в отладчике получить список подпредставлений представления составления почты, пока не найдете знакомое текстовое поле или текстовое представление, которое затем можно специально кодировать для установки статуса респондента в коде, который может выглядеть примерно так: это (не знаю, сработает ли это, но это пример):

[[[[mailcomposer.view.subviews objectAtIndex:3] subviews] objectAtIndex:2] becomeFirstResponder]
1
ответ дан 8 December 2019 в 18:37
поделиться

Вы можете заставить эти поля стать первым ответчиком.

если вы добавите следующий метод в свой класс...

//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];
8
ответ дан 8 December 2019 в 18:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: