代码之家  ›  专栏  ›  技术社区  ›  rano

iOS 4.2中未正确绘制子类uiAlertView

  •  2
  • rano  · 技术社区  · 15 年前

    我将uiAlertView子类化如下:

    @interface NarrationAlertView : UIAlertView {
        UIImage * backgroundImage; //The image I want as custom background
        UILabel * textualNarrationView; //The test I wanna be displayed on the view        
    }
    

    并通过以下方式实现:

    - (id)initNarrationViewWithImage:(UIImage *)image{
    
        if (self = [super init]){
            UILabel * alertTextLabel = [[UILabel alloc] initWithFrame:CGRectZero];
            self.textualNarrationView = alertTextLabel;
            [alertTextLabel release];
            [self addSubview:alertTextLabel];
        }
        return self;
    }
    
    - (void)drawRect:(CGRect)rect {
        /* Here I draw the image as background */
        CGSize imageSize = self.backgroundImage.size;
        [self.backgroundImage drawInRect:CGRectMake(0, 0, imageSize.width, imageSize.height)];
    }
    
    - (void)layoutSubviews {
        /* To fit the text */
        [textualNarrationView sizeToFit];
    
        CGRect textRect = textualNarrationView.frame;
        textRect.origin.x = (CGRectGetWidth(self.bounds) - CGRectGetWidth(textRect)) / 2;
        textRect.origin.y = (CGRectGetHeight(self.bounds) - CGRectGetHeight(textRect)) / 2;
        textRect.origin.y -= 70;
        textualNarrationView.frame = textRect;
    }
    
    - (void)show{
        /* Showing the view */
        [super show];
        CGSize imageSize = self.backgroundImage.size;
        self.bounds = CGRectMake(0, 0, imageSize.width, imageSize.height);
    }
    

    在以前版本的iOS上(我总是在模拟器上测试),子类运行良好,当显示时,它显示了正确绘制的自定义背景图像,并且 只是文本 在它上面,而在4.2版本中,它绘制uiAlertView经典背景(蓝色圆角矩形) 顶上 我的形象。

    我做错什么了?如有任何有关uialertview编程和uiview的建议,我们将不胜感激。

    更新 有人要共享uialertview替换类吗?

    3 回复  |  直到 15 年前
        1
  •  5
  •   James J    15 年前

        2
  •  3
  •   firien    15 年前

    - (void)didAddSubview:(UIView *)subview {
      if ([subview isMemberOfClass:[UIImageView class]]) {
        [subview removeFromSuperview];
      }
    }