2

私のアプリでは、UIButton から呼び出されたときにカスタム ポップアップを表示したいと考えています。現在、私は TSAlertView を使用していますが、より多くの UI 項目を実装し、より多くのカスタム ビルドを作成したいと考えています。したがって、私がやりたいことは、ビューコントローラーまたはビューを別のビューコントローラー内にロードし、それらの間で情報を渡すことができるようにすることです。以下の例を参照してください。

ViewController

私が読んだことから、おそらく別のビューコントローラーを別のビューコントローラーにロードすることはお勧めできません。この場合、uiview が推奨される方法であると想定します。これは正しいです?

ポップアップの背後にあるビューコントローラーの外観を薄暗くして、不透明度を70%に設定した暗い色にしたいと思います。どうすればこれを達成できますか?

基本的に、別のビューの外観を持つ AlertView に似たものを構築しようとしています。

4

2 に答える 2

0

ここに画像の説明を入力

こんにちはSReca、あなたが言っているUIalertviewのようなビューを作成するために、私も同じ要件(上の画像に示すように)を持っていました。

ここでは、.xib を必要とせずに、UIViewController の代わりに新しい UIView クラスを作成する必要があります。

init メソッドの新しい UIView のクラスでは、ユーザー インターフェイスをプログラムで作成する必要があります。そして、その高さの幅を好きなだけ維持してください。

この新しい UIView をロードするには、その uiview のオブジェクトを作成し、initwithframe を呼び出すだけで、uialerview のようにプログラムでそのビューを表示できます。

ここに参照用のコードがあります。

ModalPreviewViewController_iPhone.h

@interface ModalPreviewViewController_iPhone : UIView
@end

ModalPreviewViewController_iPhone.m

initWithFrame で必要に応じてこのサンプル コードを変更するだけです。

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        popUpView  = [[UIView alloc] initWithFrame:CGRectMake(30,30,260,420)];

        popUpBgView = [[UIView alloc] init];
        popUpBgView.frame =CGRectMake(0,0,260,420);
        [popUpBgView setBackgroundColor:[UIColor colorWithRed:51.0/255 green:51.0/255 blue:51.0/255 alpha:1]];
        [popUpView addSubview:popUpBgView];


        imageGalleryView=[[UIWebView alloc]initWithFrame:CGRectMake(0, 0, 260, 360)];
        [imageGalleryView setBackgroundColor:[UIColor redColor]];

        CGRect btnTempFrame=CGRectMake(5, 385, 90, 30);
        btnTemp=[[UIButton alloc]initWithFrame:btnTempFrame];
        [btnTemp setBackgroundImage:[UIImage imageNamed:@"btn_plain_iphone.png"] forState:UIControlStateNormal];
        [btnTemp.titleLabel setFont:[UIFont boldSystemFontOfSize:13]];
        [btnTemp.titleLabel setTextColor:[UIColor whiteColor]];
        [btnTemp addTarget:self action:@selector(onDownloadClick:) forControlEvents:UIControlEventTouchUpInside];

        CGRect btnSubscribeFrame=CGRectMake(100, 385, 90, 30);
        UIButton *btnSubscribe=[[UIButton alloc]initWithFrame:btnSubscribeFrame];
        [btnSubscribe setBackgroundImage:[UIImage imageNamed:@"btn_plain_iphone.png"] forState:UIControlStateNormal];

        [btnSubscribe.titleLabel setFont:[UIFont boldSystemFontOfSize:13]];
        [btnSubscribe.titleLabel setTextColor:[UIColor whiteColor]];
        [btnSubscribe setTitle:@"Subscribe" forState:UIControlStateNormal];
        [btnSubscribe addTarget:self action:@selector(moveTosubscribe:) forControlEvents:UIControlEventTouchUpInside];

        CGRect closeButtonFrame=CGRectMake(195, 385, 60, 30);
        UIButton *closeButton=[[UIButton alloc]initWithFrame:closeButtonFrame];
        [closeButton setBackgroundImage:[UIImage imageNamed:@"btn_plain_iphone.png"] forState:UIControlStateNormal];
        [closeButton.titleLabel setFont:[UIFont boldSystemFontOfSize:13]];
        [closeButton.titleLabel setTextColor:[UIColor whiteColor]];
        [closeButton setTitle:@"Close" forState:UIControlStateNormal];
        [closeButton addTarget:self action:@selector(closeView:) forControlEvents:UIControlEventTouchUpInside];

        CGRect swipeLabelFrame=CGRectMake(0, 0, 140, 15);
        UILabel *swipeLabel=[[UILabel alloc]initWithFrame:swipeLabelFrame];

        [swipeLabel setBackgroundColor:[UIColor clearColor]];
        [swipeLabel setText:@"> SWIPE TO SEE MORE"];
        [swipeLabel setTextColor:[UIColor lightGrayColor]];
        [swipeLabel setFont:[UIFont systemFontOfSize:12]];

        CGRect dateLabelFrame=CGRectMake(5, 365, 100, 15);
        dateLabel=[[UILabel alloc]initWithFrame:dateLabelFrame];

        [dateLabel setBackgroundColor:[UIColor clearColor]];
        [dateLabel setText:@"July 2013 #93"];
        [dateLabel setTextColor:[UIColor whiteColor]];
        [dateLabel setFont:[UIFont systemFontOfSize:13]];

        CGRect priceLabelFrame=CGRectMake(155, 365, 100, 15);
        priceLabel=[[UILabel alloc]initWithFrame:priceLabelFrame];

        [priceLabel setBackgroundColor:[UIColor clearColor]];
        [priceLabel setText:@"$3.9"];
        [priceLabel setTextColor:[UIColor colorWithRed:71.0/255 green:191.0/255 blue:226.0/255 alpha:1]];
        [priceLabel setFont:[UIFont systemFontOfSize:13]];
        [priceLabel setTextAlignment:NSTextAlignmentRight];



        CGRect labelFrame=swipeLabel.frame;
        labelFrame.origin=CGPointMake(popUpView.frame.origin.x+popUpView.frame.size.width - labelFrame.size.width, popUpView.frame.origin.y - labelFrame.size.height);


        [swipeLabel setFrame:labelFrame];

        [popUpView addSubview:imageGalleryView];
        [popUpView addSubview:btnTemp];
        [popUpView addSubview:closeButton];
        [popUpView addSubview:btnSubscribe];
        [popUpView addSubview:dateLabel];
        [popUpView addSubview:priceLabel];

        [UIView beginAnimations:@"curlup" context:nil];
        [UIView setAnimationDelegate:self];
        [UIView setAnimationDuration:.5];
        [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:popUpView cache:YES];
        [self addSubview:popUpView];

        [self addSubview:swipeLabel];
        [UIView commitAnimations];

        UIColor *color = [[UIColor alloc] initWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
        self.backgroundColor = color;

        [[[UIApplication sharedApplication] keyWindow] addSubview:self];
        [self initializeVariables];
    }
    return self;
}

そして、親ビューコントローラーで UIView クラスのオブジェクトを作成し、必要な initWithFrame とサイズで呼び出すだけです

ModalPreviewViewController_iPhone *mpvc=[ModalPreviewViewController_iPhone alloc];

        if(appDelegate.isIphone5)
            mpvc=[mpvc initWithFrame:CGRectMake(0,0,320,480)];
        else
            mpvc=[mpvc initWithFrame:CGRectMake(0,0,320,568)];

そしてUivewClassを却下するために

closeViewのようなその(UIviewClassの)メソッドの1つで、次の文を書いてそれを却下します

[self removeFromSuperview];

また、何か問題がありましたらお知らせください

于 2014-01-13T05:54:58.910 に答える