티스토리 뷰

728x90
반응형






관련성이 있는 특정 액션들을 수행하는 여러개의 버튼들을 중에서 하나를 선택하도록 할때 iOS에서 UIActionSheet를 사용합니다.


iOS7에서 디자인이 약간 변했지만 여러개의 버튼이 세로로 나열되어있고, 맨 아래에 취소버튼이 있는 형태입니다.


각각의 버튼은 맨 위에 있는 버튼부터 0번부터 시작되는 인덱스가 부여되어 delegate를 통해 사용자가 탭한 버튼이 어떤 버튼인지 알수 있어 그에 대한 처리를 할수 있습니다.



UIActionSheet가 생성된 후에 동적으로 여러개의 버튼을 추가하면 맨 아래에 이는 취소버튼의 인덱스번호가 재배열되지 않는 문제가 있습니다.


UIActionSheet를 생성할때 취소버튼을 포함해서 5개의 버튼을만들고,


후에 4개의 버튼을 추가한 경우 취소버튼의 인덱스는 4가 아닌 8이 되어야 하는데


계속해서 delegate에서는 취소버튼을 누르면 index를 4를 리턴합니다.



이러한 오류가 있어 UIActionSheet를 생성할때 cancelButton을 nil로 하고,


모든 버튼들이 추가완료되었을때 동적으로 맨마지막에 취소버튼을 추가하는 식으로 구현하면 됩니다.



- (void)viewDidLoad

{

    // cancel button을 nil로 하여 action sheet를 생성

    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"타이틀" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:@"버튼1", @"버튼2", @"버튼3", @"버튼4", nil];

   

    // 동적으로 버튼을 추가

    [actionSheet addButtonWithTitle:@"버튼5"];

    [actionSheet addButtonWithTitle:@"버튼6"];

    [actionSheet addButtonWithTitle:@"버튼7"];

    [actionSheet addButtonWithTitle:@"버튼8"];

    

    //동적으로 버튼 추가가 완료되면 취소버튼을 추가하고 cancel button index에 등록

    actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle:@"cancel"];

    

    [actionSheet showFromToolbar:self.navigationController.toolbar];

}


- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex

{

    NSLog(@"select button index : %d", buttonIndex);

    

    // 취소버튼 확인

    if (actionSheet.cancelButtonIndex == buttonIndex) {

        NSLog(@"actionsheet cancel");

        return;

    }

}

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함