2013-02-20 45 views
2

在我的应用程序中,我想要一个自定义弹出窗口,当从UIButton调用时出现。目前我正在使用TSAlertView,但我想实现更多的UI项目并且有更多的自定义构建。所以我想要做的是在另一个视图控制器中加载视图控制器或视图,并能够在它们之间传递信息。看下面的例子:如何将ViewController或View加载到具有透明背景的另一个ViewController中?

ViewController

从我读过的东西,据说它是不是在另一个加载另一个视图 - 控制很好的做法。在这种情况下,我会假设一个uview是推荐的方式。它是否正确?

我希望弹出窗口后面的viewcontroller具有暗淡的外观,也许黑色的不透明度设置为70%。我怎样才能做到这一点?

基本上,我试图建立一个类似于AlertView与另一个视图的外观。

+0

这是为iPhone或iPad? – 2013-02-20 19:31:59

回答

1

如果您打算完全阻止背景视图,您可以将viewControllerB设置为Form Sheet

当你准备好展示viewControllerB,使用方法:

[viewControllerA presentViewController:viewControllerB animated:TRUE completion:nil] 

您需要一种方法来解散viewControllerB;一个按钮,网络动作等

与故事板的一个例子:

- (void)someMethod { 
    UIStoryboard *storyboard = self.storyboard; 
    ViewControllerB *viewCotrollerB = [storyboard instantiateViewControllerWithIdentifier:@"ViewControllerB"]; 
    [self presentModalViewController:viewControllerB animated:YES]; 
} 
+0

感谢您的快速回复。我仍然在iOS开发中学习新东西,那么如何将viewController设置为iphone故事板中的表单?并通过在viewController B中设置视图清除将允许我看到viewController一个正确的? – SReca 2013-02-20 19:27:33

+0

@SReca我想你将不得不保留那个故事板,并创建在不同的.xib文件和相关的视图控制器。 – 2013-02-20 19:30:53

+0

@SReca查看更新。 – 2013-02-20 19:35:26

0

enter image description here

SReca您好,我也具有同样的要求(如在上面的图片示出)以类似UIAlertView中创建视图你在说什么。

在这里你将不得不创建一个新的UIView类而不是UIViewController,而不需要.xib。

在init方法中的新UIView类中,您将需要以编程方式创建用户界面。并尽可能保持其高度宽度。

对于加载这个新的UIView,你将不得不创建该uiview的对象,并调用initwithframe它将以uialerview的形式以编程方式呈现该视图。

这里是参考代码。

ModalPreviewViewController_iPhone.h

@interface ModalPreviewViewController_iPhone : UIView 
@end 

ModalPreviewViewController_iPhone。米

只是修改此示例代码,根据自己的需要在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

写下面的句子来解雇它,在它的一个像(UIviewClass的)方法closeView

[self removeFromSuperview]; 

让我知道,如果你面对任何问题

相关问题