gpt4 book ai didi

iphone - 在 ViewController 类之外添加 UIView 类以显示 subview

转载 作者:行者123 更新时间:2023-12-03 19:54:46 25 4
gpt4 key购买 nike

我在这里检查了很多接近的答案,没有人能解决我的愚蠢问题..

我的问题是:我有 2 个类,UIViewController classA 和 UIView classB。

按钮(classA)触发处理(classB),然后在屏幕(classA)上显示 subview 。但这不起作用。

A 类.m:

@implementation ViewController
...

- (IBAction)trigger:(UIButton *)sender {
[classB makeViewOn];
}

B 类.h:

#import <UIKit/UIKit.h>

@interface classB : UIView
+ (void)makeViewOn;

@end

B 类.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 和 UIView)上执行此操作,我该如何修复它?

我在类间通信的基本概念上做错了什么吗?

非常感谢!

最佳答案

首先,您正在创建一个名为 ViewController 类的 pointer 的新对象,因此您的 B 类对象 overlayView 不会被添加为 subview 指向 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];

希望这对您有用......

关于iphone - 在 ViewController 类之外添加 UIView 类以显示 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12444650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com