如何自定义UIActionSheet(UIAlertView)中的内容

来源:互联网 发布:ui设计用哪款mac book 编辑:程序博客网 时间:2024/05/03 09:24
UIActionSheet和UIAlertView因为UI有特殊的用途,所以本身并不允许你AddSubview之类的函数来自定义界面。
解决的办法是继承它,实现一个自定义类,重载layoutSubviews函数
#import<UIKit/UIKit.h>@interface UIImageActionSheet : UIActionSheet {
    UIImage
*titleImage;
}
-(id) initWithImage:(UIImage*)image
              title:(NSString
*)title
          
delegate:(id<UIActionSheetDelegate>)delegatecancelButtonTitle:(NSString*)cancelButtonTitle
destructiveButtonTitle:(NSString
*)destructiveButtonTitle
  otherButtonTitles:(NSString
*)otherButtonTitles;

@end
#import"UIImageActionSheet.h"@implementation UIImageActionSheet
-(id) initWithImage:(UIImage*)image
              title:(NSString
*)title
          
delegate:(id<UIActionSheetDelegate>)delegatecancelButtonTitle:(NSString*)cancelButtonTitle
destructiveButtonTitle:(NSString
*)destructiveButtonTitle
  otherButtonTitles:(NSString
*)otherButtonTitles{
   
    self
=[super initWithTitle:titledelegate:delegatecancelButtonTitle:cancelButtonTitle
         destructiveButtonTitle:destructiveButtonTitle
              otherButtonTitles:otherButtonTitles,nil];
   
   
if(self) {
        titleImage
=image;
        [titleImage retain];
        UIImageView
*imageView=[[UIImageView alloc] initWithImage:titleImage];
        imageView.frame
=CGRectZero;        
       
//for(UIView*subViewinself.subviews){
           
if(![subView isKindOfClass:[UILabel class]]) {
                [self insertSubview:imageView aboveSubview:subView];
               
break;
            }
        }
       
        [imageView release];
    }
   
returnself;
}


-(CGFloat) maxLabelYCoordinate {
   
//Determine maximum y-coordinate of labelsCGFloat maxY =0;
   
for( UIView*viewinself.subviews ){
       
if([view isKindOfClass:[UILabelclass]]) {
            CGRect viewFrame
=[view frame];
            CGFloat lowerY
=viewFrame.origin.y+viewFrame.size.height;
           
if(lowerY>maxY)
                maxY
=lowerY;
        }
    }
   
returnmaxY;
}

-(void) layoutSubviews{
    [super layoutSubviews];
    CGRect frame
=[self frame];
    CGFloat labelMaxY
=[self maxLabelYCoordinate];

   
for(UIView*viewinself.subviews){
       
if(![view isKindOfClass:[UILabel class]]) {   
           
if([view isKindOfClass:[UIImageViewclass]]){
                CGRect viewFrame
=CGRectMake((320-titleImage.size.width)/2, labelMaxY +10,
                                              titleImage.size.width, titleImage.size.height);
                [view setFrame:viewFrame];
            }
           
elseif(![view isKindOfClass:[UIImageView class]]) {
                CGRect viewFrame
=[view frame];
                viewFrame.origin.y
+=titleImage.size.height+10;
                [view setFrame:viewFrame];
            }
        }
    }
   
    frame.origin.y
-=titleImage.size.height+2.0;
    frame.size.height
+=titleImage.size.height+2.0;
    [self setFrame:frame];

}
/*// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code.
}
*/-(void)dealloc {
    [super dealloc];
   
if(titleImage) {
        [titleImage release];
    }
}

@end

使用:
 UIImage *tips3Img =[UIImage imageNamed:@"tips-3.png"];
UIImageActionSheet*tipsActionSheet=[[UIImageActionSheet alloc]
                                       initWithImage:tips3Img
                                       title:
@"添加的图案可用以下方式调整"delegate:self cancelButtonTitle:@"知道了"destructiveButtonTitle:nil
                                       otherButtonTitles:nil];
tipsActionSheet.tag
=kActionSheetTagTips;
[tipsActionSheet showInView:self.view];
[tipsActionSheet release];


图片:自定义UIActionSheet(UIAlertView)中的内容.png
原创粉丝点击