2013-01-03 37 views
0

我有兩個視圖控制器。在第一個我有一個按鈕,當它被點擊時,我想顯示在屏幕右側的其他視圖控制器登錄像模態目前表單。爲什麼模態演示文稿是空的

目前我有一個標籤第二視圖控制器,但是當我點擊它顯示爲空,我不知道的方式,因爲我把一個標籤裏面,當然在屏幕的中間。

LoginViewController *loginController = [[LoginViewController alloc] init]; 
loginController.modalPresentationStyle = UIModalPresentationFormSheet; 
[self presentViewController:loginController animated:YES completion:nil]; 
loginController.view.superview.frame = CGRectMake(0, 0, 300, 1000); 
loginController.view.superview.center = self.view.center; 

任何建議看到標籤?要改變職位?

+0

嘗試使用'initWithNibName:@ 「MyNibName」]'你'LoginViewController'初始化。它可能創造UIViewController'的'一個新實例,因爲它未鏈接到你的筆尖文件.. – Jeeter

+0

我把標題和這一觀點與該名LoginViewController控制器的故事板ID,然後將我的代碼更改LoginViewController *的LoginController = [[LoginViewController alloc] initWithNibName:@「LoginViewController」bundle:nil];但是由於未捕獲異常'NSInternalInconsistencyException',原因:'無法在軟件包中加載NIB: – Anna

+0

而不是'nil',請嘗試'[NSBundle mainBundle]',看看是否有效,終止應用程序。 – Jeeter

回答

1

我認爲這將是最好使用自定義的容器控制的方法來做到這一點。在下面的示例代碼中,我創建了一個登錄控制器,它的大小是一個表單(540 x 600),並將其從右側滑入ViewController的主視圖,以便它垂直居中,右邊。

在ViewController.m,我有這樣的:

-(IBAction)showLogin:(id)sender { 
    LoginController *login = [self.storyboard instantiateViewControllerWithIdentifier:@"Login"]; 
    login.view.frame = CGRectMake(768, 202, 540, 600);//centered vertically and offscreen to the right 
    [self addChildViewController:login]; 
    [self.view addSubview:login.view]; 
    [UIView animateWithDuration:.5 animations:^{ 
     login.view.frame = CGRectMake(228, 202, 540, 600); 
    } completion:^(BOOL finished) { 
     [login didMoveToParentViewController:self]; 
    }]; 
} 

,並刪除了看法,我有這樣的LoginController.m:

編輯
-(IBAction)goBackToMain:(id)sender { 
    [UIView animateWithDuration:.5 animations:^{ 
     self.view.frame = CGRectMake(768, 202, 540, 600); 
    } completion:^(BOOL finished) { 
     [self.view removeFromSuperview]; 
     [self removeFromParentViewController]; 
    }]; 
} 

後:

如果你想在視圖控制器按鈕刪除登錄控制器,你可以做這樣的:

-(IBAction)goBackToMain:(id)sender { 
     LoginController *login = self.childViewControllers.lastObject; 
     [UIView animateWithDuration:.5 animations:^{ 
      login.view.frame = CGRectMake(768, 202, 540, 600); 
     } completion:^(BOOL finished) { 
      [login.view removeFromSuperview]; 
      [login removeFromParentViewController]; 
     }]; 
    } 
+0

太棒了!這個更好! :)我想刪除登錄視圖,如果我點擊父控制器,所以我將不得不將goBackToMain在我的情況下在ViewController,不是嗎? – Anna

+0

@Anna是的,你可以將該代碼移動到ViewController - 你可以引用登錄控制器self.childViewControllers.lastObject – rdelmar

+0

謝謝。但是我希望goBackToMain方法在父視圖控制器中按下時執行。如果我有一個特定的按鈕,我知道如何去做,但不是在所有區域。我不知道我是否正確解釋。子視圖出現在右側部分,所以如果我點擊左側,我想刪除子視圖控制器。那麼我必須做什麼?將幾乎透明的圖像放在左邊的部分來捕捉點擊按鈕... – Anna

相關問題