MFMailComposeViewController клавиатура iphone не имеет ГОТОВО или ОТМЕНА - PullRequest
0 голосов
/ 18 декабря 2011

Клавиатура, которая поставляется с MFMailComposeViewController, не имеет возможности отменить клавиатуру после ее появления. У кого-нибудь есть идея сменить клавиатуру. UITextField не отображается, так как вы в данный момент находитесь в почтовом клиенте.

Ответы [ 2 ]

1 голос
/ 31 декабря 2011

Почтовый компоновщик не ваш, чтобы изменить, это системный контроллер представления, который вам явно сказано не изменять в документах:

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

Кнопка отмены уже есть в левом верхнем углу, что будет делать «Готово»?Отправить письмо?Это в правом верхнем углу.

0 голосов
/ 18 декабря 2011

MFMailComposeViewController не имеет кнопки «Готово», поскольку предполагает, что вы будете использовать эту кнопку в качестве клавиши возврата (для создания новой строки).

Если вы действительно хотите изменить кнопку на«Готово», есть только один способ сделать это:

  1. Создать новый MFMailComposeViewController.
  2. Перечислять через [[mailComposer view] subviews].
  3. Проверьте каждое подпредставление (и подпредставления подпредставлений, если необходимо).
  4. Когда вы нашли UITextView, который является телом, выполните следующее:

    // Get the UITextView from subview inspection
    UITextView *textView;
    
    // Declare this instance variable in your class @interface
    id <UITextViewDelegate> originalTextViewDelegate;
    
    // Get the original delegate
    originalTextViewDelegate = [textView delegate];
    
    // Override the delegate
    [textView setDelegate:self];
    
    // Set the return key type
    [textView setReturnKeyType:UIReturnKeyDone];
    
  5. Вернуть YES для -textViewShouldEndEditing.Реализуйте ВСЕ методы UITextViewDelegate и вызовите originalTextViewDelegate (вроде как вызов «super» для подкласса).

    - (BOOL)textViewShouldEndEditing:(UITextView *)textView
    {
        [originalTextViewDelegate textViewShouldEndEditing:textView];
        // Important: return YES, regardless of originalTextViewDelegate's response 
        return YES;
    }
    
    - (void)textViewDidChangeSelection:(UITextView *)textView
    {
        [originalTextViewDelegate textViewDidChangeSelection:textView];
    }
    
    - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
    {
        return [originalTextViewDelegate textView:textView shouldChangeTextInRange:range replacementText:text];
    }
    
    // etc
    

Это должно работать, но без гарантий.Надеюсь, это поможет!: D

...