흔히 경고창으로 사용되는 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];
[참고]
배경으로 쓰인 이미지 입니다.
버튼 배경으로 쓰인 이미지 입니다.