我在这里检查了许多接近的答案,没有人可以解决我的愚蠢问题..
我的问题是:我有2个类,UIViewController classA和UIView classB。
按钮(classA)触发进程(classB),然后在屏幕上显示子视图(classA)。 但它不起作用。
classA .m:
@implementation ViewController
...
- (IBAction)trigger:(UIButton *)sender {
[classB makeViewOn];
}
classB .h:
#import <UIKit/UIKit.h>
@interface classB : UIView
+ (void)makeViewOn;
@end
classB .m:
#import "classB.h"
#import "ViewController.h"
@implementation classB
+ (void)makeViewOn
{
ViewController *pointer = [ViewController new];
UIWindow *window = pointer.view.window;
classB *overlayView = [[classB alloc] initWithFrame:window.bounds];
overlayView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5f];
overlayView.userInteractionEnabled = YES;
[pointer.view addSubview:overlayView];
}
@end
如果我只在一个类UIViewController中执行此操作,它可以正常工作;但是,如果我在两个单独的类(UIViewController&amp; UIView)上执行此操作,我该如何解决它?
我是否在课堂间沟通的基本概念上做错了什么?
非常感谢!
答案 0 :(得分:2)
首先,您正在创建ViewController类的名为 pointer 的新对象,因此您的classB对象 overlayView 未添加为子视图到classA,而不是对象指针。
其次,如果您打印并检查 window.bounds ,则返回(null)。
修改classB中的类方法
+ (void)makeViewOnParentView:(id)sender;
+ (void)makeViewOnParentView:(id)sender
{
ViewController *pointer = (ViewController*)sender;
//UIWindow *window = pointer.view.window;
CGRect rect=pointer.view.frame;
classB *overlayView = [[classB alloc] initWithFrame:CGRectMake(0, 0,rect.size.width, rect.size.height)];
overlayView.backgroundColor = [[UIColor greenColor] colorWithAlphaComponent:0.5f];
overlayView.userInteractionEnabled = YES;
[pointer.view addSubview:overlayView];
}
在你的classA中调用方法
[classB makeViewOnParentView:self];
希望这对你有用......