2012-01-03 69 views
1

我的iPhone/iPad應用程序中有一個非常奇怪的UI故障。因爲我想找到它的原因,我用盡可能少的代碼創建了一個新項目。重要的代碼如下。UISplitViewController和模態UIViewControllers的問題

基本上,我有一個UISplitViewController包含兩個UIViewController子類。當點擊一個按鈕時,第一個按模態顯示,並且如UIModalPresentationFormSheet a UIViewController子類別Modal。在那裏,當點擊一個按鈕時,會出現另一個名爲Text的子類,這次是UIModalPresentationFullScreen。在Text中,有一個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; 
} 
+0

你能否提供一個展示此行爲的示例項目的下載鏈接? – 2012-01-03 15:38:16

+0

@SebastianCelis現在上傳了,請看問題。 – fabian789 2012-01-03 16:01:50

+0

您的存檔無法構建。它在您的項目之外引用文件。 – 2012-01-03 16:05:56

回答

0

您可能需要從UISplitViewController呈現模態的意見,而不是它的子視圖。 ..

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

[splitViewController presentModalViewController:modal animated:YES];