| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- //
- // CustomAlertView.m
- // JasonDevelop
- //
- // Created by Jason Lee on 3/6/14.
- // Copyright (c) jasondevelop. All rights reserved.
- //
- #import <objc/runtime.h>
- #import "NSString-Addtions.h"
- #import "CustomAlertView.h"
- #import "Masonry.h"
- //#import "AppDelegate.h"
- #define kfButtonSize 260.0f
- #define kfBoxCap 4.0f
- static NSString *CustomAlertViewHandlerRunTimeAccosiationKey = @"CustomAlertViewHandlerRunTimeAccosiationKey";
- @interface CustomAlertView () {
-
- }
- @end
- @implementation CustomAlertView
- //커스텀 얼럿 인스턴스를 생성함, 단순 형태
- - (id)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate OKButtonTitle:(NSString *)okButtonTitle cancelButtonTitle:(NSString *)cancelButtonTitle {
- NSArray *nibViews = [[NSBundle mainBundle] loadNibNamed:@"CustomAlertView"
- owner:nil
- options:nil];
- self = (CustomAlertView*)[nibViews firstObject];
- CGRect screenRect = [UIScreen mainScreen].bounds;
- self.frame = screenRect;
- //메시지, 버튼 타이틀 설정
- _okButtonTitle = okButtonTitle;
- _cancelButtonTitle = cancelButtonTitle;
- _lblBoldMessage.hidden = YES;
- _lblMessage2.hidden = YES;
- CGRect m1Rect = _lblMessage1.frame;
- _lblTitle.text = title;
- //텍스트 사이즈 만큼 레이블사이즈를 늘림
- _lblMessage1.text = message;
- m1Rect.size.height = [CommonUtil getLabelRealHeight:_lblMessage1];
- _lblMessage1.frame = m1Rect;
- return self;
- }
- //커스텀 얼럿 인스턴스를 생성함, 볼드메시지와 메시지1, 메시지2를 가지고 있음.
- - (id)initWithTitle:(NSString *)title delegate:(id)delegate OKButtonTitle:(NSString *)okButtonTitle cancelButtonTitle:(NSString *)cancelButtonTitle message:(NSString *)messages,... {
- NSString *boldMessage = messages;
- NSString *message1 = nil, *message2 = nil;
- va_list args;
- va_start(args, messages);
- NSInteger i = 0;
- while ((messages = va_arg(args, id)) != nil) {//루프 - 입력된 메시지를 받아옴.
- if (i == 0) {
- message1 = messages;
- } else if (i == 1) {
- message2 = messages;
- }
- i++;
- }
- va_end(args);
- self = [self initWithTitle:title message:message1 delegate:delegate OKButtonTitle:okButtonTitle cancelButtonTitle:cancelButtonTitle];
- _lblBoldMessage.hidden = [boldMessage isEmptyString];
- _lblMessage2.hidden = [message2 isEmptyString];
- CGRect m1Rect = _lblMessage1.frame;
- if (!_lblBoldMessage.hidden) {//볼드 메시지가 있을 경우,
- _lblBoldMessage.text = boldMessage;
- [_lblBoldMessage sizeToFit];
- [CommonUtil moveToCenterHorizon:_lblBoldMessage withContainer:_popUpView];
- CGRect bRect = _lblBoldMessage.frame;
- bRect.origin.y = m1Rect.origin.y;
- _lblBoldMessage.frame = bRect;
- m1Rect.origin.y = bRect.origin.y + bRect.size.height + kfLabelMargin;
- _lblMessage1.frame = m1Rect;
- }
- if (!_lblMessage2.hidden) {//2번 메시지가 있을 경우,
- _lblMessage2.text = message2;
- [_lblMessage2 sizeToFit];
- [CommonUtil moveToCenterHorizon:_lblMessage2 withContainer:_popUpView];
- CGRect m2Rect = _lblMessage2.frame;
- m2Rect.origin.y = m1Rect.origin.y + m1Rect.size.height + kfLabelMargin;
- _lblMessage2.frame = m2Rect;
- }
- return self;
- }
- - (void)didMoveToSuperview {
- if (!_cancelButtonTitle) {
- if (_btnCancel && [_btnCancel superview]) {
- [_containerView removeConstraint:_constraintBtnSameWidth];
- [_btnCancel removeFromSuperview];
- _constraintBtnConfirmWidth.constant = (IPHONE_WIDTH - 20) - 2.0f;
- _btnCancel = nil;
- }
- }
- }
- - (IBAction)btnConfirmTouched:(id)sender {
- [self alertView:self clickedButtonAtIndex:0];
- [self removeFromSuperview];
- }
- - (IBAction)btnCancelTouched:(id)sender {
- [self alertView:self clickedButtonAtIndex:1];
- [self removeFromSuperview];
- }
- - (void)show {
- if ([UIApplication sharedApplication].applicationState != UIApplicationStateActive) {
- return;
- }
-
- //얼럿이 뜨는 경우, 로딩창을 종료함.
- UIView *topView = [CommonUtil topView];
- if (!topView) {
- [self performSelector:@selector(show) withObject:nil afterDelay:0.3f];
- return;
- }
- [topView addSubview:self];
- [topView bringSubviewToFront:self];
-
- NSLog(@"%s\n %@, %zd : 0=active, 1=inactive, 2=background", __PRETTY_FUNCTION__, topView, [UIApplication sharedApplication].applicationState);
- }
- - (void)layoutSubviews {
- [super layoutSubviews];
-
- if (IOS_VERSION >= 8.0) {
- CGRect screenRect = [UIScreen mainScreen].bounds;
- self.frame = screenRect;
- if (_maskingView.superview) {
- [_maskingView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.width.mas_equalTo(screenRect.size.width);
- make.height.mas_equalTo(screenRect.size.height);
- make.center.equalTo(self);
- }];
- }
- if (_popUpView.superview) {
- [_popUpView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.equalTo(_maskingView).offset(10);
- make.right.equalTo(_maskingView).offset(-10);
-
- CGFloat margin = (screenRect.size.height - _popUpView.frame.size.height) / 2;
- make.top.mas_equalTo(margin);
- make.bottom.mas_equalTo(-margin);
- }];
- }
- }
- }
- - (void)showWithCompletion:(CustomAlertViewCallBackHandler)completion {
- //set runtime accosiation of object
- //param - sourse object for association, association key, association value, policy of association
- objc_setAssociatedObject(self, (__bridge const void *)(CustomAlertViewHandlerRunTimeAccosiationKey), completion, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
- // objc_setAssociatedObject(self, (__bridge const void *)(CustomAlertViewHandlerRunTimeAccosiationKey), completion, OBJC_ASSOCIATION_COPY_NONATOMIC);
- [self show];
- }
- - (void)alertView:(CustomAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
- CustomAlertViewCallBackHandler completionHandler = objc_getAssociatedObject(self, (__bridge const void *)(CustomAlertViewHandlerRunTimeAccosiationKey));
- if (completionHandler != nil) {
- completionHandler(alertView, buttonIndex);
- }
- }
- - (void)alertView:(CustomAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
- CustomAlertViewCallBackHandler completionHandler = objc_getAssociatedObject(self, (__bridge const void *)(CustomAlertViewHandlerRunTimeAccosiationKey));
- if (completionHandler != nil) {
- completionHandler(alertView, buttonIndex);
- }
- }
- @end
|