0

私は2つのビューコントローラーを持っています。最初のボタンにはボタンがあり、クリックすると、画面の右側にもう1つのView Controllerが表示され、モーダルプレゼントフォームシートのようにログインできます。

今のところ、ラベル付きの2番目のView Controllerがありますが、クリックすると空に表示されます。ラベルを内部、もちろん画面の中央に配置しているため、方法がわかりません。

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;

ラベルを見るための提案はありますか?位置を変更するには?

4

1 に答える 1

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];
    }];
}

編集後:

ViewControllerのボタンからログインコントローラを削除する場合は、次のように実行できます。

-(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];
        }];
    }
于 2013-01-03T21:57:20.873 に答える