如何自定义UIActionSheet中的内容

 我来答
好程序员
2016-09-11 · HTML5前端培训/大数据培训/Java
好程序员
好程序员是IT高端课程培训基地,从平凡到卓越,为梦想而拼搏。
向TA提问
展开全部
UIActionSheet和UIAlertView因为UI有特殊的用途,所以本身并不允许你AddSubview之类的函数来自定义界面。解决的办法是继承它,实现一个自定义类,重载layoutSubviews函数

//.h
#import <UIKit/UIKit.h>

@interface UIImageActionSheet : UIActionSheet {
UIImage *titleImage;
}
-(id) initWithImage:(UIImage *)image
title:(NSString *)title
delegate:(id <UIActionSheetDelegate>)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 <UIActionSheetDelegate>)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];

}
/*
// 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];
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式