如何自定义UIActionSheet中的内容

UIActionSheet和UIAlertView因为UI有特殊的用途,所以本身并不允许你AddSubview之类的函数来自定义界面。

解决的办法是继承它,实现一个自定义类,重载layoutSubviews函数

#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


#import "UIImageActionSheet.h"


@implementation UIImageActionSheet


- (id)initWithFrame:(CGRect)frame

{

    self = [super initWithFrame:frame];

    if (self) {

        // Initialization code

    }

    return self;

}


-(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

{

    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-30);

                [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];

}


-(void)dealloc

{

    [super dealloc];

    if (titleImage)

    {

        [titleImage release];

    }

}


@end


使用:

UIImage *img = [UIImage imageNamed:@"baidu_sylogo1.gif"];

    UIImageActionSheet *imageActionSheet = [[UIImageActionSheet alloc] initWithImage:img

                                                                               title:@"添加的图案可用以下方式"

                                                                            delegate:self

                                                                   cancelButtonTitle:@"OK"

                                                              destructiveButtonTitle:nil

                                                                   otherButtonTitles:nil];

    

    //在开发过程中,发现有时候UIActionSheet的最后一项点击失效,点最后一项的上半区域时有效,这是在特定情况下才会发生,这个场景是试用了UITabBar的时候才有。解决方法

    [imageActionSheet showInView:self.view.window];

    //让动态添加的按钮在取消按钮之上

    //[imageActionSheet addButtonWithTitle:@"知道了"];

    //[imageActionSheet addButtonWithTitle:@"OK"];

    //[imageActionSheet addButtonWithTitle:NSLocalizedString(@"取消", @"cancel button title")];

    //imageActionSheet.cancelButtonIndex = imageActionSheet.numberOfButtons - 1;

    [imageActionSheet release];




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值