0

这是一个荒谬的愚蠢问题,但我遇到了麻烦。我创建了一个 .xib,其中包含三个 UIView。一个绿色视图、一个红色视图和一个蓝色视图。我在模拟器中运行时会显示绿色视图。我在我的绿色视图上放了 2 个按钮。一个显示红色视图,一个显示蓝色视图。这是我的绿色视图代码:

#import "IDGreenView.h"
#import "IDRedView.h"
#import "IDBlueView.h"
#import "IDGreenView.h"

@interface IDGreenView()
@property (weak, nonatomic) IBOutlet UIButton *RedViewButton;
@property (weak, nonatomic) IBOutlet UIButton *BlueViewButton;

@end

@implementation IDGreenView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}
- (IBAction)showRedView:(id)sender {
    [self.window addSubview:[[IDRedView alloc]init]];
}
- (IBAction)showBlueView:(id)sender {
    [self.window addSubview:[[IDBlueView alloc]init]];
}

@end

这是我的红色视图代码:

#import "IDRedView.h"

@implementation IDRedView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

@end

我可以看到它进入了 Red View 的 initWithFrame 方法,所以我知道调用没问题。我需要做什么才能显示红色视图?

谢谢你。

--------------------------------------------------更新评论------------------------------------------------ --

没有。我将以下代码放在 ViewController 中,但也没有用。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    [self.view addSubview:[[IDRedView alloc] initWithFrame:self.view.bounds]];
}

为什么不显示?

4

3 回答 3

2

我发现您的代码存在两个主要问题:

首先,为什么要将视图添加到窗口中?[self.window addSubview...]. 如果IDGreenView是你的一个子类,UIView你应该只说:[self addSubview...]

其次,您正在创建IDRedView并且IDBlueView没有框架(再次假设它们都是 的子类UIView)。尝试使用框架创建它们,如下所示:

// You may have to adjust the frame to fit your needs
[[IDRedView alloc] initWithFrame:CGRectMake(0,0,20,20)];

希望这可以帮助!

于 2013-10-24T19:42:42.360 回答
1

而不是self.window尝试仅使用self. 但是在这种情况下,您并没有真正替换您正在创建一个新视图并将其放置在当前视图中的视图。所以如果你最终继续这样做,你最终会得到几十个嵌套视图。

您还需要使用initWithFrame:init。所以你最终会得到:

- (IBAction)showRedView:(id)sender {
    [self addSubview:[[IDRedView alloc] initWithFrame:self.bounds]];
}

上述实现将完全隐藏您当前的视图,只显示新视图。

于 2013-10-24T19:45:26.037 回答
1

快速浏览一下,您的红色视图并不像您想象的那样“红色”。

您说您在 ONE xib 中创建了 3 个视图,但我看到它们是在 3 个文件中定义的。您通过调用 [IDRedView alloc] init] 获得的红色视图不是您在 xib 中创建的视图。因此,它不是“红色”。

如果你想这样分配它们,你真的应该为 3 个视图分配 3 个 xib,但是你需要使用 initWithNibName: 来分配它们。

要查看您正确添加视图并且您不疯狂:

试试这个,在红色视图中 -

- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        self.backgroundcolor = [UIColor redColor];
    }
    return self; 
}
于 2013-10-24T20:13:59.503 回答