MFMailComposeViewController Пустой экран при открытии в альбомном режиме - PullRequest
1 голос
/ 25 мая 2011

Использование MFMailComposeViewController работает нормально, когда телефон находится в UIInterfaceOrientationPortrait, однако, если я не разрешаю автоповорот, я получаю что-то подобное, когда пользователь поворачивает телефон:

enter image description here

Так что ярешил разрешить контроллер представления (который также является модальным представлением), который является частью представления, вызывающего вращение модального представления:

RootAppInfoViewController.h

#import <UIKit/UIKit.h>


@interface RootAppInfoViewController : UIViewController <UINavigationControllerDelegate>{
    UINavigationController *navigationControl;
}

@property (nonatomic,retain) IBOutlet UINavigationController *navigationControl;

//dismisses this modal view
- (IBAction)selectHome:(id)sender;

@end

RootAppInfoViewController.m

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations.
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

(Кстати, этот автоматический поворот позволяет вращать весь вид).Но это простой контроллер представления, и я хочу, чтобы представление таблицы было представлено модально, поэтому у меня есть этот класс, на который ссылается RootAppInfoViewController.xib, который делает это модальное представление представлением таблицы:

AppInfoViewController.h

#import <UIKit/UIKit.h>
#import <MessageUI/MessageUI.h>


@interface AppInfoViewController : UITableViewController <MFMailComposeViewControllerDelegate, UINavigationControllerDelegate> {
    NSMutableArray *dataSourceArray;
}

@property(nonatomic, retain) NSMutableArray *dataSourceArray;

@end

AppInfoViewController.m

//..
/* //NOTE: Commenting or uncommenting this block of code has no effect!
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations.
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}//*/
//...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    NSString *source = [[[self.dataSourceArray objectAtIndex:indexPath.section] objectForKey:kSourceKey] objectAtIndex:indexPath.row];

    if(indexPath.section == kFeedbackSection) {
        if([MFMailComposeViewController canSendMail]) {
            // fill out email
            //...
            MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];
            //MailCompose *controller = [[MailCompose alloc] init];
            controller.mailComposeDelegate = self;
            [[controller navigationBar] setTintColor:[UIColor oceanColor]];
            [controller setToRecipients:[NSArray arrayWithObject:kFeedbackEmail]];
            [controller setSubject:emailSubject];
            [controller setMessageBody:emailBodyTemplate isHTML:NO];
            [self presentModalViewController:controller animated:YES];
            [controller release];
        } else {
            [UIAlertHelper mailErrorAlert];
        }
    } //... 

}

#pragma mark -
#pragma mark MFMailComposeViewControllerDelegate methods

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
    [self dismissModalViewControllerAnimated:YES];
}

Комментирование или некомментирование кода авторотации в этом классе не имеет никакого эффекта.удерживая устройство в вертикальном положении и нажимая на строку, в которой загружается MFMailComposeViewControlleryeild, проблем не возникает, оно загружается в вертикальном положении, а затем вращается очень хорошо.Однако при загрузке табличного представления, удерживая его сбоку, а затем нажав на строку с помощью MFMailComposeViewController, загружается модальный контроллер представления в виде пустого экрана:

enter image description here

Это происходит как в симулятореи фактическое физическое устройство.

Кто-нибудь знает, что случилось?Заранее спасибо!

1 Ответ

0 голосов
/ 26 мая 2013

Чтобы адекватно объяснить ответ, я сначала должен уточнить, как был создан мой модальный вид.

Вот обзор моих представлений:

RootViewController -> AppInfoViewController -> MFMailComposeViewController

У меня в моем RootViewController был следующий метод:

- (IBAction)openEmail:(id)sender {
    AppInfoViewController *aivc = [[AppInfoViewController alloc] initWithNibName:@"AppInfoViewController" bundle:nil];
    aivc.title = @"Email";
    [self presentModalViewController:aivc animated:YES];
    [aivc release];
 }

, который бы вызывал модальный контроллер представления, отображающий табличное представление, из которого пользователь сможет перейти к другим представлениям.Проблема в том, что я создал модальный контроллер, не помещая представление, которое он сначала представляет, в контроллер навигации, например так:

- (IBAction)openEmail:(id)sender {
    AppInfoViewController *aivc = [[AppInfoViewController alloc] initWithNibName:@"AppInfoViewController" bundle:nil];
    myNavigationController = [[UINavigationController alloc] initWithRootViewController:aivc];
    aivc.title = @"Email";
    [self presentModalViewController:myNavigationController animated:YES];
    [myNavigationController release];
    [aivc release];
}

После изменения кода, приведенного выше, все работало нормально.Проблема не в AppInfoViewController.

...