提示框小助手:AlertViewHelper

剛開始一直使用的是UIAlertController饥伊,發(fā)現(xiàn)多重alert會(huì)因?yàn)槎啻蝑issmiss回到不可預(yù)見的界面歇竟,所以就謹(jǐn)慎使用AlertVC了舞丛,

調(diào)起本地相冊(cè)相機(jī)

/*使用ALertController

* @brief調(diào)起本地相機(jī)撒踪,相冊(cè)

*底部出現(xiàn)偷俭,數(shù)組中傳遞的是字符串?dāng)?shù)組

* @param<#param#>

*/

+ (UIAlertController*)setAlertViewForAddImageWithAlertStyle:(UIAlertControllerStyle)alertStyle array:(NSArray *)titleArray local:(StatusBlock)local camera:(StatusBlock)camera {

UIAlertController* userIconAlert = [UIAlertControlleralertControllerWithTitle:titleArray[0]message:@""preferredStyle:alertStyle];

if(titleArray[1]) {

UIAlertAction* chooseFromPhotoAlbum = [UIAlertActionactionWithTitle:titleArray[1]style:UIAlertActionStyleDefaulthandler:^(UIAlertAction*_Nonnullaction) {

local();

}];

[userIconAlertaddAction:chooseFromPhotoAlbum];

}

if(titleArray[2]) {

UIAlertAction* chooseFromCamera = [UIAlertActionactionWithTitle:titleArray[2]style:UIAlertActionStyleDefaulthandler:^(UIAlertAction*_Nonnullaction) {

camera();

}];

[userIconAlertaddAction:chooseFromCamera];

}

UIAlertAction* canelAction = [UIAlertActionactionWithTitle:[titleArraylastObject]style:UIAlertActionStyleCancelhandler:^(UIAlertAction*_Nonnullaction) {

//取消

}];

[userIconAlertaddAction:canelAction];

returnuserIconAlert;

}

帶有按鈕的Alert

/*

* @brief ?title為按鈕字符串走贪,message為提示信息

*

* @param<#param#>

*/

+ (void)setAlertWithViewController:(UIViewController*)viewController Title:(NSString*)title message:(NSString*)message cancelTitle:(NSString*)cancelTitle sureTitle:(NSString*)sureTitle cancle:(StatusBlock)cancle sure:(StatusBlock)sure {

__weaktypeof(viewController) weakSelf = viewController;

UIAlertController*alertVC = [UIAlertControlleralertControllerWithTitle:titlemessage:messagepreferredStyle:UIAlertControllerStyleAlert];

if(cancelTitle) {

UIAlertAction*cancelAction = [UIAlertActionactionWithTitle:cancelTitlestyle:UIAlertActionStyleCancelhandler:^(UIAlertAction*_Nonnullaction) {

cancle();

}];

[alertVCaddAction:cancelAction];

}

if(sureTitle) {

UIAlertAction*sureAction = [UIAlertActionactionWithTitle:sureTitlestyle:UIAlertActionStyleDefaulthandler:^(UIAlertAction*_Nonnullaction) {

sure();

}];

[alertVCaddAction:sureAction];

}

[weakSelfpresentViewController:alertVCanimated:YEScompletion:nil];

}

常規(guī)提示框位置固定在屏幕下部

OC中并每次調(diào)用全部view佛猛,label都是臨時(shí)創(chuàng)建的,方法如下

+ (UIView*)showViewAtBottomWithViewController:(UIViewController*)viewController string:(NSString*)string{

UIView*view = [[UIViewalloc]initWithFrame:CGRectMake(ScreenWidth/2.0-100,ScreenHeight-90,200,40)];

view.layer.masksToBounds=YES;

view.layer.cornerRadius=5;

view.backgroundColor= [[UIColorblackColor]colorWithAlphaComponent:0.4];

UILabel*label = [[UILabelalloc]initWithFrame:CGRectMake(5,5,190,30)];

label.text= string;

label.textColor= [UIColorwhiteColor];

label.textAlignment=NSTextAlignmentCenter;

label.font= [UIFontsystemFontOfSize:14];

CGFloatwidth = [UILabelgetWidthWithTitle:stringfont:[UIFontsystemFontOfSize:14]];

if(width >ScreenWidth-80) {

view.frame=CGRectMake(40,ScreenHeight-90,ScreenWidth-80,40);

label.frame=CGRectMake(5,5,ScreenWidth-80-10,30);

}

else

{

view.frame=CGRectMake((ScreenWidth- width)/2,ScreenHeight-90, width +10,40);

label.frame=CGRectMake(5,5, width,30);

}

[viewaddSubview:label];

[viewController.viewaddSubview:view];

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0*NSEC_PER_SEC)),dispatch_get_main_queue(), ^{

[viewremoveFromSuperview];

});

returnview;

}

其中方法+ (CGFloat)getWidthWithTitle:(NSString*)title font:(UIFont*)font 是給了label類目坠狡,自適應(yīng)提示信息高度不完美继找,

+ (CGFloat)getWidthWithTitle:(NSString*)title font:(UIFont*)font {

UILabel*label = [[UILabelalloc]initWithFrame:CGRectMake(0,0,1000,0)];

label.text= title;

label.font= font;

[labelsizeToFit];

returnlabel.frame.size.width;

}

OC中這個(gè)方法沒有完善,1.每次調(diào)用新建空間逃沿,2.提示信息沒那么長(zhǎng)所有沒有給定限制婴渡,

swift中完善了這個(gè)方法

import UIKit

class AlertViewHelper:NSObject{

static let shareInstance =AlertViewHelper()

private override init() {

}//單例

private var view =UIView()

private var label =UILabel()

private var size:CGSize?

//MARK: MARK標(biāo)簽----底部提示框

/*

* @brief<#Function#>

*

* @param<#param#>

*/

func showViewAtBottom(target:UIView,string:String) ->UIView{

if target.subviews.contains(view) {

view.removeFromSuperview()

}

view.frame=CGRectMake(SCREENWIDTH/2.0-100,SCREENHEIGHT-90,200,40)

view.layer.masksToBounds=true

view.layer.cornerRadius=5

view.backgroundColor=UIColor.blackColor().colorWithAlphaComponent(0.4)

label.frame=CGRectMake(5,5,190,30)

label.text= string

label.textColor= .whiteColor()

label.textAlignment= .Center

label.font=UIFont.systemFontOfSize(14)

label.numberOfLines=0

size=RequestHelper.getLabelSize(CGSizeMake(CGFloat(MAXFLOAT),CGFloat(MAXFLOAT)), string: string, font:UIFont.systemFontOfSize(14))

ifInt(size!.width) >Int(SCREENWIDTH) -60{

size=getLabelSize(CGSizeMake((CGFloat(SCREENWIDTH) -60),CGFloat(MAXFLOAT)), string: string, font:UIFont.systemFontOfSize(14))

}

label.frame=CGRectMake(10,5,size!.width,size!.height)

view.frame=CGRectMake((SCREENWIDTH-size!.width)/2.0-20,SCREENHEIGHT-50-size!.height-5,size!.width+20,size!.height+10)

view.addSubview(label)

target.addSubview(view)

dispatch_after(dispatch_time(DISPATCH_TIME_NOW,Int64(1.0*Double(NSEC_PER_SEC))),dispatch_get_main_queue()) {

iftarget.subviews.contains(self.view) {

self.view.removeFromSuperview()

}

}

returnview

}

//MARK: MARK標(biāo)簽----獲取文字的長(zhǎng)度和高度

/*

* @brief需要顯示一行,則size寬高均為最大凯亮,定寬時(shí)高度為最大

*

* @param<#param#>

*/

func getLabelSize(size:CGSize,string:String,font:UIFont) ->CGSize{

let str = string as NSString

return(str.boundingRectWithSize(size, options: .UsesLineFragmentOrigin, attributes: [NSFontAttributeName:font], context:nil).size)

}

}

中心狀態(tài)顯示

沒怎么用

/*

* @brief狀態(tài)顯示

*

* @param<#param#>

*/

+ (UIActivityIndicatorView*)setAlertViewAndFlowersWithViewController:(UIViewController*)viewController {

UIView*view = [[UIViewalloc]initWithFrame:CGRectMake(ScreenWidth/2.0-40,ScreenHeight/2.0-40,80,80)];

view.backgroundColor= [[UIColorblackColor]colorWithAlphaComponent:0.5];

view.layer.masksToBounds=YES;

view.layer.cornerRadius=5;

[viewController.viewaddSubview:view];

UIActivityIndicatorView*flowerView = [[UIActivityIndicatorViewalloc]initWithFrame:CGRectMake(15,15,50,50)];

flowerView.activityIndicatorViewStyle=UIActivityIndicatorViewStyleWhite;

flowerView.hidesWhenStopped=YES;

[flowerViewstartAnimating];

[viewaddSubview:flowerView];

returnflowerView;

}

含有l(wèi)ablel和TextField的多行提示框

+ (void)alertControllerWithTitle:(NSString*)title message:(NSString*)message viewController:(UIViewController*)viewController preferredStyle:(UIAlertControllerStyle)preferredStyle textFieldPlaceHolders:(NSArray *) placeholderssureHandel:(void(^)(NSArray* alterTextFs)) sureHandel cancelHandel:(void(^)()) cancelHander{

__weaktypeof(viewController) weakSelf = viewController;

UIAlertController*alertC = [UIAlertControlleralertControllerWithTitle:titlemessage:messagepreferredStyle:preferredStyle];

UIAlertAction*shureAction = [UIAlertActionactionWithTitle:@"確定"style:UIAlertActionStyleDefaulthandler:^(UIAlertAction*_Nonnullaction) {

if(sureHandel) {

NSMutableArray*temArr = [NSMutableArrayarray];

[alertC.textFieldsenumerateObjectsUsingBlock:^(UITextField*_Nonnullobj,NSUIntegeridx,BOOL*_Nonnullstop) {

[temArraddObject:obj.text];

}];

sureHandel([temArrcopy]);

}

}];

UIAlertAction*cancelAction = [UIAlertActionactionWithTitle:@"取消"style:UIAlertActionStyleCancelhandler:^(UIAlertAction*_Nonnullaction) {

if(cancelHander) {

cancelHander();

}

}];

[alertCaddAction:shureAction];

[alertCaddAction:cancelAction];

//plcaceholder

[placeholdersenumerateObjectsUsingBlock:^(NSString*_Nonnullobj,NSUIntegeridx,BOOL*_Nonnullstop) {

[alertCaddTextFieldWithConfigurationHandler:^(UITextField*_NonnulltextField) {

textField.placeholder= placeholders[idx];

}];

}];

[weakSelfpresentViewController:alertCanimated:YEScompletion:nil];

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末边臼,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子假消,更是在濱河造成了極大的恐慌柠并,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,332評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件富拗,死亡現(xiàn)場(chǎng)離奇詭異臼予,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)媒峡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,508評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門瘟栖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谅阿,你說我怎么就攤上這事半哟〕曷耍” “怎么了?”我有些...
    開封第一講書人閱讀 157,812評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵寓涨,是天一觀的道長(zhǎng)盯串。 經(jīng)常有香客問我,道長(zhǎng)戒良,這世上最難降的妖魔是什么体捏? 我笑而不...
    開封第一講書人閱讀 56,607評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮糯崎,結(jié)果婚禮上几缭,老公的妹妹穿的比我還像新娘。我一直安慰自己沃呢,他們只是感情好年栓,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,728評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著薄霜,像睡著了一般某抓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惰瓜,一...
    開封第一講書人閱讀 49,919評(píng)論 1 290
  • 那天否副,我揣著相機(jī)與錄音,去河邊找鬼崎坊。 笑死备禀,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的流强。 我是一名探鬼主播痹届,決...
    沈念sama閱讀 39,071評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼打月!你這毒婦竟也來了队腐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,802評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤奏篙,失蹤者是張志新(化名)和其女友劉穎柴淘,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秘通,經(jīng)...
    沈念sama閱讀 44,256評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡为严,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,576評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肺稀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片第股。...
    茶點(diǎn)故事閱讀 38,712評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖话原,靈堂內(nèi)的尸體忽然破棺而出夕吻,到底是詐尸還是另有隱情诲锹,我是刑警寧澤,帶...
    沈念sama閱讀 34,389評(píng)論 4 332
  • 正文 年R本政府宣布涉馅,位于F島的核電站归园,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏稚矿。R本人自食惡果不足惜庸诱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,032評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晤揣。 院中可真熱鬧桥爽,春花似錦、人聲如沸碉渡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)滞诺。三九已至,卻和暖如春环疼,著一層夾襖步出監(jiān)牢的瞬間习霹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,026評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工炫隶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留淋叶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,473評(píng)論 2 360
  • 正文 我出身青樓伪阶,卻偏偏與公主長(zhǎng)得像煞檩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子栅贴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,606評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容