iOS2012. 6. 20. 13:26

흔히 경고창으로 사용되는 UIAlertView는 자주는 안 쓰이지만, 사용할 때를 대비해서 커스텀해보도록 하겠습니다.



먼저, UIAlertView 사용법부터 보겠습니다.

UIAlertView *nomalAlert = [[UIAlertView alloc]initWithTitle:@"공지사항" message:@"기본 경고창입니다."delegate:self cancelButtonTitle:@"확인" otherButtonTitles:@"취소"nil];

[nomalAlert show];


initWithTitle : (문자열) 타이틀이 들어갑니다

message : (문자열) 안에 들어가는 내용을 쓰시면 됩니다.

delegate : 기본적으로 self로 연결해줍니다. ( Textfield 등 다른 delegate도 연결가능합니다. )

cancelButtonTitle : 눌렀을 때, 자동으로 AlertView가 없어집니다. 보통 "확인" 버튼으로 사용됩니다.

otherButtonTitles : "확인"버튼 이외의 버튼을 추가적으로 넣을 수 있습니다.

아, 그리고 반드시 show함수를 호출해야 화면에 표시됩니다.


+@ 각 버튼에 대한 이벤트는 <UIAlterDelegate>를 통해 
- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex 를 통해 제어할 수 있습니다.

ex) if( buttonIndex == 0) // 첫번째 버튼 이벤트
       else if( buttonIndex == 1) // 두번째 버튼 이벤트

[결과화면]


자 그럼 UIAlterView를 커스텀하기 위해서 xCode에서 Command+n으로 소스를 하나 만듭시다.
이름은 원하시는 대로, 전 customAlert라고 만들었습니다.

기본적으로 NSObject Class를 상속받고 있지만 이걸 UIAlertView로 바꾸어 줍시다.

// UIAlertView 상속

@interface CustomAlertView : UIAlertView


UIAlertView를 하나의 모양으로 정해놓는 방법
- 첫번째 방법의 경우 실질적으로 화면에 표시되는 UIAlertView의 show함수만 재정의 하는 방법으로 가능하며

// Custom하는데 필요한 함수들 Overriding
-(void)show
{

    [super show];

    for (UIView* view in self.subviews) {

        if ([view isKindOfClass:[UIImageView class]]) {  // SubView UIImageView이면 -> 바탕

            UIImage *bg = [UIImage imageNamed:@"bg.png"];

            ((UIImageView*)view).image = [bgresizableImageWithCapInsets:UIEdgeInsetsMake(50,10,10,10)];

        }

        else if ([view isKindOfClass:[UIButton class]]) { // Button type 이면 

            [(UIButton*)view setBackgroundImage:[UIImage imageNamed:@"buttonBG.png"]forState:UIControlStateNormal];

        }

        else if ([view isKindOfClass:[UILabel class]]) {  // UILabel이면.

            l.shadowColor = [UIColor blackColor];

        }

    }


}


이 경우에는 우리가 만든 customAlert를 통해 선언 후에 기본 AlertView와 똑같이 사용해도 바뀜.


-- 결과 --

CustomAlertView *alert = [[CustomAlertView alloc]initWithTitle:@"공지사항" message:@"\n커스텀 경고창입니다." delegate:self cancelButtonTitle:@"확인" otherButtonTitles:@"취소"nil];

[alert show];





[참고]

배경으로 쓰인 이미지 입니다.


버튼 배경으로 쓰인 이미지 입니다.

Posted by 다오나무