如何自定义UIActionSheet中的内容

来源:互联网 发布:国家安全法 网络窃密 编辑:程序博客网 时间:2024/04/30 01:01
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 = [superinitWithFrame: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 = [superinitWithTitle:title delegate:delegate cancelButtonTitle:cancelButtonTitledestructiveButtonTitle:destructiveButtonTitle otherButtonTitles:otherButtonTitles,nil];

   if (self)

    {

       titleImage = image;

        [titleImageretain];

        

       UIImageView *imageView = [[UIImageViewalloc] initWithImage:titleImage];

        imageView.frame =CGRectZero;

        

       for (UIView *subViewin self.subviews)

        {

          if(![subView isKindOfClass:[UILabelclass]])

           {

               [selfinsertSubview:imageView aboveSubview:subView];

              break;

           }

        }

        [imageViewrelease];

    }

    return self;

}


-(CGFloat)maxLabelYCoordinate

{

   CGFloat maxY = 0;

   for (UIView *viewin self.subviews)

    {

       if ([view isKindOfClass:[UILabelclass]])

        {

           CGRect viewFrame = [view frame];

           CGFloat lowerY = viewFrame.origin.y + viewFrame.size.height;

           if (lowerY > maxY)

            {

                maxY = lowerY;

            }

        }

    }

   return maxY;

}


-(void)layoutSubviews

{

    [superlayoutSubviews];

   CGRect frame = [selfframe];

   CGFloat labelMaxY = [selfmaxLabelYCoordinate];

   for(UIView *viewin self.subviews){

       if (![view isKindOfClass:[UILabelclass]]) {

           if([view isKindOfClass:[UIImageViewclass]]){

               CGRect viewFrame = CGRectMake((320 - titleImage.size.width)/2, labelMaxY +10,

                                             titleImage.size.width,titleImage.size.height-30);

                [viewsetFrame:viewFrame];

            }

           else if(![viewisKindOfClass:[UIImageViewclass]]) {

               CGRect viewFrame = [view frame];

                viewFrame.origin.y +=titleImage.size.height+10;

                [viewsetFrame:viewFrame];

            }

        }

    }

    frame.origin.y -=titleImage.size.height +2.0;

    frame.size.height +=titleImage.size.height +2.0;

    [selfsetFrame:frame];

}


-(void)dealloc

{

    [superdealloc];

    if (titleImage)

    {

        [titleImagerelease];

    }

}


@end


使用:

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

    UIImageActionSheet *imageActionSheet = [[UIImageActionSheetalloc] initWithImage:img

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

                                                                           delegate:self

                                                                  cancelButtonTitle:@"OK"

                                                             destructiveButtonTitle:nil

                                                                  otherButtonTitles:nil];

    

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

    [imageActionSheetshowInView:self.view.window];

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

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

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

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

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

    [imageActionSheetrelease];




原创粉丝点击