UIAlertView自定义,支持自动消失时间
1.利用block
#import <UIKit/UIKit.h>
@class TKAlertView;
//cancel:0, ok:1
typedef void(^TKAlertViewIndexHandler) (NSInteger index, TKAlertView *alertView);
@interface TKAlertView : UIAlertView
@property (copy, nonatomic) TKAlertViewIndexHandler indexHandler;
@property (assign, nonatomic) double autoRemoveDelayTime; //多长时间自动移除, 单位 s
+ (instancetype)alertWithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle okButtonTitles:(NSString *)okButtonTitle indexHandler:(TKAlertViewIndexHandler)indexHandler;
- (void)dismiss;
@end
2.具体方法实现
#import "TKAlertView.h"
@interface TKAlertView ()
@property (copy, nonatomic) TKAlertViewIndexHandler handler;
@end
@implementation TKAlertView
+ (instancetype)alertWithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle okButtonTitles:(NSString *)okButtonTitle indexHandler:(TKAlertViewIndexHandler)indexHandler
{
TKAlertView *alertView = [[TKAlertView alloc] initWithTitle:title
message:message
delegate:nil
cancelButtonTitle:cancelButtonTitle
otherButtonTitles:okButtonTitle, nil];
alertView.indexHandler = indexHandler;
return alertView;
}
- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated
{
//cancel:0, ok:1
if (self.indexHandler) self.indexHandler(buttonIndex, self);
if (self.alertViewStyle != UIAlertViewStyleDefault && buttonIndex != 0) {
return;
}
[super dismissWithClickedButtonIndex:buttonIndex animated:animated];
}
- (void)show
{
[super show];
if (_autoRemoveDelayTime > 0) {
[self performSelector:@selector(dismiss) withObject:nil afterDelay:_autoRemoveDelayTime];
}
}
- (void)dismiss
{
[self dismissWithClickedButtonIndex:0 animated:YES];
}
//具体实现
#pragma mark - 按钮方法
- (IBAction)loginBtnClicked:(id)sender {
[self endEditing:YES];
if ([MYGLOBAL checkEmailIsValid:_loginUsernameTF.text] == NO) {
TKAlertView *alertView = [TKAlertView alertWithTitle:nil
message:@"E-mail format wrong!"
cancelButtonTitle:nil
okButtonTitles:@"OK"
indexHandler:nil];
[alertView show];
return;
}