欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

iOS 自定義UIActionSheet

系統(tǒng) 2911 0

?

一:模態(tài)視圖

UIActionSheet、UIAlertView、GKPeerPickerController、UIAPopover、GKPanel等都是ios系統(tǒng)自帶

的模態(tài)視圖。

模態(tài)視圖的一個(gè)重要的特性就是在顯示模態(tài)視圖的時(shí)候可以阻斷其他視圖的事件響應(yīng)。

該特性在有些時(shí)候?qū)ξ覀兪欠浅S杏玫摹?

?

那么任何自己實(shí)現(xiàn)一個(gè)模態(tài)視圖呢?

?

一種方式就是自己實(shí)現(xiàn)一個(gè)UIViewController,然后作為一個(gè)modalViewController視圖顯示。這種方式固然可以

,但是需要的工作量可就不少了,例如顯示動(dòng)畫,動(dòng)態(tài)布局等等。

這里我要說的另一種方法,就是實(shí)現(xiàn)這些系統(tǒng)模態(tài)視圖的子視圖,對(duì)系統(tǒng)視圖進(jìn)行定制,以滿足我們自己的需求。可以完美的使用系統(tǒng)模態(tài)

視圖已經(jīng)提供的動(dòng)畫、自動(dòng)布局等等行為。

?

二:系統(tǒng)模態(tài)視圖的顯示方式

系統(tǒng)模態(tài)視圖的顯示和上面提到到的自定義模態(tài)視圖的顯示方式有很大的差別。

?

UIActionSheet、UIAlertView、GKPeerPickerController、UIAPopover、GKPanel 都是UIView的子類,

如果直接在讀取視圖之上顯示這些UIActionSheet等等的視圖,是無法阻斷事件的。因此系統(tǒng)自帶的這些模態(tài)

視圖先被添加到一個(gè)UIWindow的視圖,再把給window視圖作為application的keyWindow顯示。也就是在顯示

模態(tài)視圖的時(shí)候,application的多window的。

?

三:移除系統(tǒng)模態(tài)

調(diào)用dismiss系列的方法移除模態(tài)視圖

?

四:模態(tài)視圖的實(shí)現(xiàn)基礎(chǔ)

所有的模態(tài)視圖都基于UIViewControll提供的兩個(gè)方法:

?

– presentModalViewController:animated:

– dismissModalViewControllerAnimated:

?

UIActionSheet、UIAlertView的實(shí)現(xiàn)都是對(duì)這兩個(gè)方法的實(shí)現(xiàn)和在實(shí)現(xiàn)。

?

五:向模態(tài)視圖添加其他UIView的方式:

?

一:動(dòng)態(tài)添加UIView

(1):通過[UIApplication sharedApplication].keyWindow 取得當(dāng)前的makeKeyAndVisible window,該window的

大小是這個(gè)屏幕的大小,和該window包含的 UIActionSheet等視圖不是一個(gè)級(jí)別。UIActionSheet 僅僅是該window的

一個(gè)子視圖而已。

[[UIApplication sharedApplication].keyWindow addSubview:self.progressHUD];

?

(2):根據(jù)讀取模態(tài)視圖的window屬性,取得當(dāng)前的makeKeyAndVisible window

?

? ? [self.actionSheet.window addSubview:self.progressHUD]

?

注意:以上兩種方式一定要在模態(tài)視圖顯示出來之后再添加其他的UIview,否則添加的UIView可能無法顯示。

?

二:靜態(tài)添加UIView

把需要添加的UIView視圖直接在模態(tài)視圖的drawRect方法中添加就可以了。這些在顯示模態(tài)視圖時(shí)候,添加的

UIView也會(huì)被顯示處理。

?

?

UIActionSheet 視圖的自定義

?

?

    //
//  UserDetailVoiceCustomActionSheet.h
//  BaiHe
//
//  Created by xu on 12-12-15.
//  Copyright (c) 2012年 itotemstudio. All rights reserved.
//

#import <UIKit/UIKit.h>

@protocol BHCustomActionSheetDelegate <NSObject>

 @optional
    - (void)actionSheet:(UIActionSheet *)actionSheet clickedOtherButtonAtIndex:(NSInteger)buttonIndex;
    - (void)actionSheetCancel:(UIActionSheet *)actionSheet;
    - (void)actionSheetDestructive:(UIActionSheet *)actionSheet;

@end


@interface BHCustomActionSheet : UIActionSheet
{
    UIButton                        *_destructiveButton;
    id<BHCustomActionSheetDelegate> _customActionDelegate;
}

@property (nonatomic, retain) UIButton *destructiveButton;
@property (nonatomic, assign) id<BHCustomActionSheetDelegate> customActionDelegate;

@end

  

?

?

?

    //
//  UserDetailVoiceCustomActionSheet.m
//  BaiHe
//
//  Created by xu on 12-12-15.
//  Copyright (c) 2012年 itotemstudio. All rights reserved.
//

#import "BHCustomActionSheet.h"
#import "UIImageExt.h"


@interface BHCustomActionSheet ()

- (void)clickedOtherButton:(id)sender;
- (void)clickCanncelButton;
- (void)clickDestructiveButton;

@end

@implementation BHCustomActionSheet

@synthesize destructiveButton    = _destructiveButton;
@synthesize customActionDelegate = _customActionDelegate;


- (void)dealloc
{
    _customActionDelegate = nil;
    RELEASE_SAFELY(_destructiveButton);
    
    [super dealloc];
}

//去除背景色
- (void)drawRect:(CGRect)rect
{
    UIImageView *bgView = [[[UIImageView alloc] initWithFrame:self.bounds] autorelease];
    bgView.image = [[UIImage imageNamed:@"bg"] resizeUsingCapInsets:UIEdgeInsetsMake(180.f, 5.f, 4.f, 4.f)];
    [self addSubview:bgView];
    
    UILabel *titleLabel = nil;
    NSMutableArray *buttons = [NSMutableArray arrayWithCapacity:10];
    for (UIView *view in self.subviews) {
        if ([view isKindOfClass:[UIControl class]]) {
            [self bringSubviewToFront:view];
            [buttons addObject:view];
            [view removeFromSuperview];
        }
        if ([view isKindOfClass:[UILabel class]]) {
            titleLabel = (UILabel *)view;
        }
    }
    
    
//    if (titleLabel) {
        CGRect hilghtBgImageFrame = CGRectMake(0.0f, 0.0f, CGRectGetWidth(rect), CGRectGetMaxY(titleLabel.frame) == 0.f?60.f:CGRectGetMaxY(titleLabel.frame) + 5.f);
        UIImageView *hilghtBgImageView = [[[UIImageView alloc] initWithFrame:hilghtBgImageFrame] autorelease];
        [self addSubview:hilghtBgImageView];
        [self bringSubviewToFront:titleLabel];
        hilghtBgImageView.image = [[UIImage imageNamed:@"bg-highlight"] resizeUsingCapInsets:UIEdgeInsetsMake(31.f, 5.f, 42.f, 4.f)];
        
//    }
    
    NSMutableIndexSet *delSet = [NSMutableIndexSet indexSet];
    
    if (self.destructiveButtonIndex >= 0) {
        NSString *destructiveButtonTitle = [self buttonTitleAtIndex:self.destructiveButtonIndex];
        UIButton *customDestructiveBut = [UIButton buttonWithType:UIButtonTypeCustom];
        self.destructiveButton = customDestructiveBut;
        
        [customDestructiveBut setTitleColor:[UIColor whiteColor]
                                   forState:UIControlStateNormal];
        [customDestructiveBut setTitleShadowColor:[UIColor whiteColor]
                                   forState:UIControlStateNormal];
        customDestructiveBut.titleLabel.font = [UIFont boldSystemFontOfSize:18.f];
        
        [customDestructiveBut setBackgroundImage:[[UIImage imageNamed:@"but_Destructive"] resizeUsingCapInsets:UIEdgeInsetsMake(15.f, 50., 20.f, 60.f)]
                                        forState:UIControlStateNormal];
        
        [customDestructiveBut addTarget:self
                                 action:@selector(clickDestructiveButton)
                       forControlEvents:UIControlEventTouchUpInside];
        customDestructiveBut.frame = ((UIControl *)[buttons objectAtIndex:self.destructiveButtonIndex]).frame;
        [customDestructiveBut setTitle:destructiveButtonTitle forState:UIControlStateNormal];
        [self addSubview:customDestructiveBut];
        [delSet addIndex:self.destructiveButtonIndex];
    }
    
    if (self.cancelButtonIndex >= 0) {
        NSString *cancelButtonTitle = [self buttonTitleAtIndex:self.cancelButtonIndex];
        UIButton *customCancelBut = [UIButton buttonWithType:UIButtonTypeCustom];
        [customCancelBut setTitleColor:[UIColor grayColor]
                              forState:UIControlStateNormal];
        [customCancelBut setTitleShadowColor:[UIColor grayColor]
                                    forState:UIControlStateNormal];
        customCancelBut.titleLabel.font = [UIFont boldSystemFontOfSize:18.f];
        [customCancelBut setBackgroundImage:[[UIImage imageNamed:@"but_Cancel"] resizeUsingCapInsets:UIEdgeInsetsMake(15.f, 50., 20.f, 60.f)]
                                   forState:UIControlStateNormal];

        
        [customCancelBut addTarget:self
                            action:@selector(clickCanncelButton)
                  forControlEvents:UIControlEventTouchUpInside];
        customCancelBut.frame = ((UIControl *)[buttons objectAtIndex:self.cancelButtonIndex]).frame;
        [customCancelBut setTitle:cancelButtonTitle forState:UIControlStateNormal];
        [self addSubview:customCancelBut];
        [delSet addIndex:self.cancelButtonIndex];
    }
    
    [buttons removeObjectsAtIndexes:delSet];
    
    int index = 0;
    for (UIControl *control in buttons) {
        NSString *otherButtonTitle = [self buttonTitleAtIndex:index];
        UIButton *customOtherBut = [UIButton buttonWithType:UIButtonTypeCustom];
        [customOtherBut setTitleColor:[UIColor grayColor]
                             forState:UIControlStateNormal];
        [customOtherBut setTitleShadowColor:[UIColor grayColor]
                                   forState:UIControlStateNormal];
        customOtherBut.titleLabel.font = [UIFont boldSystemFontOfSize:18.f];
        [customOtherBut setBackgroundImage:[[UIImage imageNamed:@"but_Cancel"] resizeUsingCapInsets:UIEdgeInsetsMake(15.f, 50., 20.f, 60.f)]
                                   forState:UIControlStateNormal];
        customOtherBut.tag = index;
        [customOtherBut addTarget:self
                           action:@selector(clickedOtherButton:)
                 forControlEvents:UIControlEventTouchUpInside];
        customOtherBut.frame = ((UIControl *)[buttons objectAtIndex:index]).frame;
        [customOtherBut setTitle:otherButtonTitle forState:UIControlStateNormal];
        [self addSubview:customOtherBut];
        index ++;
    }
    
    [buttons removeAllObjects];
}

#pragma mark - Private Method

- (void)clickedOtherButton:(id)sender
{
    NSInteger index = ((UIControl *)sender).tag;
    if (self.customActionDelegate
        && [self.customActionDelegate respondsToSelector:@selector(actionSheet:clickedButtonAtIndex:)]) {
        [self.customActionDelegate actionSheet:self clickedOtherButtonAtIndex:index];
    }
    
    [self clickCanncelButton];
}

- (void)clickCanncelButton
{
    if (self.customActionDelegate
        && [self.customActionDelegate respondsToSelector:@selector(actionSheetCancel:)]) {
        [self.customActionDelegate actionSheetCancel:self];
    }
    
    [UIApplication sharedApplication].statusBarHidden = NO;
}

- (void)clickDestructiveButton
{
    if (self.customActionDelegate
        && [self.customActionDelegate respondsToSelector:@selector(actionSheetDestructive:)]) {
        [self.customActionDelegate actionSheetDestructive:self];
    }
}


@end

  
?

iOS 自定義UIActionSheet iOS 自定義UIActionSheet iOS 自定義UIActionSheet

?

重新drawRect方法,可以去除UIActionSheet的默認(rèn)樣式,然后通過addSubView方法添加定制的視圖。


?

iOS 自定義UIActionSheet


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 欧美一级片免费看 | 免费看特黄特黄欧美大片 | 亚洲欧洲高清有无 | 精品国产理论在线观看不卡 | 一级毛片免费看 | 碰碰免费视频 | 一级视频在线 | 国产欧美精品一区二区三区 | 欧美经典剧情系列h版在线观看 | 亚洲成人福利在线观看 | 色婷婷综合在线 | 国产馆精品推荐在线观看 | 无码色情影片视频在线看免费 | 亚洲 日本 欧美 中文幕 | 亚洲不卡 | 天天插天天射天天操 | 5月婷婷6月丁香 | 亚洲欧美日韩一级特黄在线 | 大逼逼影院 | 午夜在线看 | 一级肉体aa电影 | 日韩精品无码一区二区三区 | 日韩第一页在线 | 亚洲综合一区二区三区 | 我不卡在线观看 | 五月天婷婷久久 | 久久国产这里只精品免费 | 福利片在线观看 | 91视频官网| 久久2| 色就干 | 午夜影院试看五分钟 | 香港三级台湾三级在线播放徐 | 狠狠综合久久综合鬼色 | 国内精品久久久久尤物 | 日韩欧美国产精品 | 大逼逼影院 | 91在线成人 | 日韩欧美在线一区 | 国产日韩在线观看一区 | 国产精品久久久久国产精品 |