0

それを達成する方法はわかりませんが、下の画像は、表示したいモーダルのサイズを示しています。

Modal View Controller

モーダルビューをプッシュするために使用される私のコードは次のとおりです。

CustomerLogin *customerlogin = [[CustomerLogin alloc] initWithNibName:@"CustomerLogin" bundle:nil];
        [self presentModalViewController:customerlogin animated:YES]; 

        [customerlogin release];

編集 - -

以下のように提案された変更を加えました。

UIView *overlay = [[UIView alloc] initWithFrame:self.view.bounds];
        overlay.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5]; // Black color
        [self.navigationController.view addSubview:overlay];

        //Add Login View
        CustomerLogin *loginView = [[CustomerLogin alloc] initWithFrame:CGRectMake(0,0, 200, 300)]; //I guessed a size
        loginView.center = overlay.center; //Center the view
        [overlay addSubview:loginView];

3つのエラーが発生する:

プロパティセンターがCustomerLoginに存在しませんCustomerLoginは、CustomerLogin*をタイプUIView*に送信するinitWithFrame互換性のないポインタタイプに応答しません

4

3 に答える 3

2

単一のビューではなく、モーダルビューコントローラーを提示しようとしています。

これを実現するための最良のアプローチは、オーバーレイ(たとえば、アルファ0.5の黒)を作成し、その上にログインビューを表示することです。

オーバーレイは、ユーザーがバックグラウンドにあるコントロール(NavigationViewControllerが使用されている場合は戻るボタン、ボタン、タブなど)を操作できないようにするために使用されます。

これは例です:

UIView *overlay = [[UIView alloc] initWithFrame:self.view.bounds];
overlay.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5]; // Black color
[self.view addSubview:overlay];

//Add Login View
CustomLoginView *loginView = [[CustomLoginView alloc] initWithFrame:CGRectMake(0,0, 200, 300)]; //I guessed a size
loginView.center = overlay.center; //Center the view
[overlay addSubview:loginView];

TabBarControllerまたはNavigationControllerがある場合は、useまたはを使用する代わりに、オーバーレイを適用する必要があることに注意し[self.view addSubview:overlay][self.tabBarController.view addSubview:overlay]ください[self.navigationController.view addSubview:overlay]

于 2012-04-26T13:28:59.880 に答える
1

使用する

    -(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
        // grab an image of our parent view
    UIView *parentView = self.presentingViewController.view;

        // For iOS 5 you need to use presentingViewController:
        // UIView *parentView = self.presentingViewController.view;

    UIGraphicsBeginImageContext(parentView.bounds.size);
    [parentView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *parentViewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

        // insert an image view with a picture of the parent view at the back of our view's subview stack...
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.bounds];
    imageView.image = parentViewImage;
    [imageView setHidden:YES];
    [self.view insertSubview:imageView atIndex:0];
}
-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [[self.view.subviews objectAtIndex:0] setHidden:NO];
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];

        // remove our image view containing a picture of the parent view at the back of our view's subview stack...
    [[self.view.subviews objectAtIndex:0] removeFromSuperview];
}

モーダルビューコントローラで

モーダルビューはフルスクリーンである必要があることに注意してください。モーダルビューにしたいものを、背景が透明な別のフルスクリーンサイズのビュー内に配置します。

モーダルビューコントローラのビューはこのビューである必要があります

于 2012-04-26T13:24:24.770 に答える
1

TSAlertViewを確認することをお勧めします。UIAlertViewのコードのようなドロップインであるカスタマイズされたビューを作成できます。 https://github.com/TomSwift/TSAlertView

于 2012-04-26T14:31:27.403 に答える