淘宝自定义内容区,如何自定义UIActionSheet(UIAlertView)中的内容

UIActionSheet和UIAlertView因为UI有特殊的用途,所以本身并不允许你AddSubview之类的函数来自定义界面。解决的办法是继承它,实现一个自定义类,重载layoutSubviews函数
//.h #import @interface UIImageActionSheet : UIActionSheet { UIImage *titleImage; } -(id) initWithImage:(UIImage *)image title:(NSString *)title delegate:(id )delegate cancelButtonTitle:(NSString *)cancelButtonTitle destructiveButtonTitle:(NSString *)destructiveButtonTitle otherButtonTitles:(NSString *)otherButtonTitles;
@end

//.m file #import "UIImageActionSheet.h" @implementation UIImageActionSheet -(id) initWithImage:(UIImage *)image title:(NSString *)title delegate:(id )delegate cancelButtonTitle:(NSString *)cancelButtonTitle destructiveButtonTitle:(NSString *)destructiveButtonTitle otherButtonTitles:(NSString *)otherButtonTitles{ self = [super initWithTitle:title delegate:delegate cancelButtonTitle:cancelButtonTitle destructiveButtonTitle:destructiveButtonTitle otherButtonTitles:otherButtonTitles,nil]; if (self) { titleImage=image; [titleImage retain]; UIImageView *imageView = [[UIImageView alloc] initWithImage:titleImage]; imageView.frame = CGRectZero; // for (UIView *subView in self.subviews){ if (![subView isKindOfClass:[UILabel class]]) { [self insertSubview:imageView aboveSubview:subView]; break; } } [imageView release]; } return self; } - (CGFloat) maxLabelYCoordinate { // Determine maximum y-coordinate of labels CGFloat maxY = 0; for( UIView *view in self.subviews ){ if([view isKindOfClass:[UILabel class]]) { CGRect viewFrame = [view frame]; CGFloat lowerY = viewFrame.origin.y + viewFrame.size.height; if(lowerY > maxY) maxY = lowerY; } } return maxY; } -(void) layoutSubviews{ [super layoutSubviews]; CGRect frame = [self frame]; CGFloat labelMaxY = [self maxLabelYCoordinate]; for(UIView *view in self.subviews){ if (![view isKindOfClass:[UILabel class]]) { if([view isKindOfClass:[UIImageView class]]){ CGRect viewFrame = CGRectMake((320 - titleImage.size.width)/2, labelMaxY + 10, titleImage.size.width, titleImage.size.height); [view setFrame:viewFrame]; } else if(![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]; } /* // _disibledevent=>*/ - (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)中的内容
Tags:  自定义内容区图片 淘宝自定义内容 自定义导航内容 自定义内容区 淘宝自定义内容区

延伸阅读

最新评论

发表评论