Проблемы с UISplitViewController и модальными UIViewControllers - PullRequest
1 голос
/ 03 января 2012

У меня действительно странный глюк пользовательского интерфейса в приложении для iPhone / iPad.Поскольку я хотел найти причину этого, я создал новый проект с как можно меньшим количеством кода.Важный код приведен ниже.

По сути, у меня есть UISplitViewController, содержащий два UIViewController подкласса.Когда кнопка нажата, первая представлена ​​модально и как UIModalPresentationFormSheet подкласс UIViewController, называемый Modal.Там, когда кнопка нажата, другой подкласс UIViewController называется Text, на этот раз как UIModalPresentationFullScreenText есть UITextView.При нажатии все в порядке, но при повороте iPad я получаю следующее:

enter image description here

Белая часть - это контроллер вида Text, красная часть вфон ViewControllerTwo.

Кто-нибудь знает, почему это происходит?И что я могу сделать, чтобы это исправить?


Вот проект: MediaFire


Вот соответствующий исходный код:

// AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    ViewControllerOne *one = [[ViewControllerOne alloc] init];
    ViewControllerTwo *two = [[ViewControllerTwo alloc] init];

    UISplitViewController *split = [[UISplitViewController alloc] init];
    split.viewControllers = [NSArray arrayWithObjects:one, two, nil];

    self.window.rootViewController = split;

    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

// ViewControllerOne.m

#import "Modal.h"

@implementation ViewControllerOne

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor blueColor];

    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame = CGRectMake(30, 30, 44, 44);

    [button addTarget:self action:@selector(buttonTapped) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:button];
}

- (void)buttonTapped
{
    Modal *modalOne = [[Modal alloc] init];
    modalOne.modalPresentationStyle = UIModalPresentationFormSheet;

    [self presentModalViewController:modalOne animated:YES];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{ 
    return YES;
}

// Modal.m

#import "Text.h"

@implementation Modal

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIButton *buttonOne = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    buttonOne.frame = CGRectMake(30, 30, 44, 44);
    buttonOne.tag = 1;
    [buttonOne addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];

    UIButton *buttonTwo = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    buttonTwo.frame = CGRectMake(30, 100, 44, 44);
    buttonTwo.tag = 2;
    [buttonTwo addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:buttonOne];
    [self.view addSubview:buttonTwo];
}

- (void)buttonTapped:(UIButton *)button
{
    if (button.tag == 1)
    {
        Text *text = [[Text alloc] init];
        text.modalPresentationStyle = UIModalPresentationFullScreen;
        [self presentModalViewController:text animated:YES];
    }
    else
    {
        [self dismissModalViewControllerAnimated:YES];
    }
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{ 
    return YES;
}

// Text.m

@implementation Text

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor greenColor];

    UITextView *textView = [[UITextView alloc] initWithFrame:self.view.bounds];
    textView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    [self.view addSubview:textView];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{ 
    return YES;
}

1 Ответ

0 голосов
/ 13 мая 2012

Вам может потребоваться представить модальные представления из UISplitViewController вместо его подпредставлений ...

UISplitViewController *splitViewController = [(AppDelegate *)[[UIApplication sharedApplication] delegate] splitViewController];

[splitViewController presentModalViewController:modal animated:YES];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...