如何在禁用父视图(而不是子视图)的父视图上打开子视图(自定义)?

时间:2014-04-30 15:17:04

标签: ios objective-c uiview

我想在点击父屏幕上的按钮时打开一个屏幕(小孩子屏幕)。我还想禁用与父视图的互动,直到子视图打开。我试图将孩子打开为子视图,如果我禁用了父级,它也会禁用子视图,这是有意义的。

我还尝试使用presentViewController子视图打开为单独的视图,但在这种情况下,它会使父屏幕完全变黑。

打开子视图的最佳方法是什么?以及如何禁用父视图?

解决方案:

ParentViewController是主视图控制器,ChildViewController是子视图,它只有.m和.h文件。通过这种方式,您可以在自己的类上处理单击事件,否则会引发异常

在文件ParentViewController.h中

#import “ParentViewController.h
#import “ChildViewController.h"
@class ChildViewController;

@interface ParentViewController : UIViewController
{
 ChildViewController *childViewController;
}

在文件ParentViewController.m

 @implementation ParentViewController`
 -(void)viewDidLoad`
 {
  childViewController  = [[ChildViewController alloc]initWithNibName:@“Child” bundle:nil];
 }

  -(IBAction)btnSubView:(id)sender 
  { 
  UIView *clearView = [[UIView alloc]init];
  clearView.frame = self.view.frame;`
  childViewController.view.frame = CGRectMake(200, 350, 404, 227);
  clearView.backgroundColor = [UIColor colorWithRed:0.0 green:0.1 blue:0.4 alpha:0.2];
  [self.view addSubview:clearView];
  [clearView addSubview:groupViewController.view];
  }

2 个答案:

答案 0 :(得分:0)

您可以打开隐藏父级的子级子视图(即,它具有相同的宽度和高度,具有灰色背景并消耗触摸),然后在该子视图中打开处理用户交互的子视图。

如果您想要显示实际的父级超级视图,您可以使您的模糊视图透明,您只需要在第一层子视图中确保您捕获所有触摸并且不允许它们传递给父级上海华。有关信息,请参阅此信息:how to prevent a touch event passed to a UIView's superview?

答案 1 :(得分:0)

1 - 创建一个。 xib并自定义.xib文件

2 - 使用此代码调用子子视图

CalloutView *calloutView = (CalloutView *)[[[NSBundle mainBundle] loadNibNamed:@"calloutView" owner:self options:nil] objectAtIndex:0];
            CGRect calloutViewFrame = calloutView.frame;
            calloutViewFrame.origin = CGPointMake(-calloutViewFrame.size.width/2 + 15, -calloutViewFrame.size.height);
            calloutView.frame = calloutViewFrame;

            [calloutView.calloutLabel setText:[(locationAnnotation*)[view annotation] title]];
            [calloutView.CallDattabel setText:[(locationAnnotation*)[view annotation] subtitle]];
            [calloutView.ImageSate setImage:[(locationAnnotation*)[view annotation] image ]];
            [view addSubview:calloutView];