0

これはとてつもなくばかげた質問ですが、私はそれに問題があります。3 つの UIView を含む .xib を 1 つ作成しました。1 つのグリーン ビュー、1 つのレッド ビュー、および 1 つのブルー ビュー。シミュレーターで実行すると、緑色のビューが表示されます。Green View に 2 つのボタンを配置しました。1 つはレッド ビューを表示し、もう 1 つはブルー ビューを表示します。グリーンビューのコードは次のとおりです。

#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

Red Viewのコードは次のとおりです。

#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

あなたのコードには 2 つの主な問題があります。

まず、なぜウィンドウにビューを追加するのですか? [self.window addSubview...]. IDGreenViewのサブクラスである場合は、次のようにUIView言うだけです。[self addSubview...]

2 番目に、フレームなしで を作成IDRedViewIDBlueViewています (繰り返しますが、両方とも のサブクラスであると仮定します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 に答える