UIView与BOOL的奇怪行为

时间:2016-07-15 09:00:22

标签: ios objective-c iphone uiview uiviewcontroller

我已经完成了我UIView代表的自定义UIViewController。视图显示在屏幕上,但我在UIView实例上设置的BOOL无法识别。

代码:

UIView实施:

- (id)initWithFrame:(CGRect)frame{

    self = [super initWithFrame:frame];
    if (self) {
        [self createInterface];
    }
    return self;
}

-(void)createInterface
{
    if (self.isSplash == YES) {
       self.backgroundColor = [UIColor clearColor];
    }
    else {
        self.backgroundColor = DARK_BLUE;
        [self setupTimer];

    }
....

的ViewController:

self.sponsorView = [[SponsorMechanismView alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(self.logo.frame)+10, SCREEN_WIDTH, 100)];
    self.sponsorView.isSplash = YES;

    [self.view addSubview:self.sponsorView];

所以,我将BOOL设置为YES,但在这个UIView中它总是NO。

3 个答案:

答案 0 :(得分:1)

正如Fabio所说,createInterface已经被执行了 你可以做的是创建自己的init函数。像这样:

- (id)initWithFrame:(CGRect)frame isSplash(BOOL)isSplash
{
    self = [super initWithFrame:frame];
    self.isSplash = isSplash;
    if (self) {
        [self createInterface];
    }
    return self;
}  

该函数的调用将如下:

self.sponsorView = [[SponsorMechanismView alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(self.logo.frame)+10, SCREEN_WIDTH, 100) isSplash:YES];

答案 1 :(得分:1)

- (id)initWithFrame:(CGRect)frame AndIsFlash:(BOOL)isFlash{

self = [super initWithFrame:frame];
if (self) {
    [self createInterfaceAndisFlash:isFlash];
}
return self;
}

-(void)createInterfaceAndisFlash:(BOOL)isFlash
{
    if (isFlash == YES) {
        self.backgroundColor = [UIColor clearColor];
    }
    else {
        self.backgroundColor = [UIColor blueColor];
    } 
}

希望你有个主意。

答案 2 :(得分:1)

如评论中所述:

设置creatInterface时,isSplash方法已经执行。 您可以通过覆盖isSplash的设置者并在那里调用createInterface来解决此问题。 这里的代码示例:

- (void)setIsSplash:(BOOL)isSplash
{
    if (isSplash != _isSplash)
    {
        _isSplash = isSplash;
        [self createInterface];
    }
}