[ios] varlist가 아닌 배열을 전달하여 UIActionSheet ‘otherButtons’를 만듭니다.

UIActionSheet의 단추 제목에 사용할 문자열 배열이 있습니다. 불행히도 메서드 호출의 otherButtonTitles : 인수는 배열이 아닌 가변 길이 문자열 목록을 사용합니다.

그렇다면 이러한 제목을 UIActionSheet에 어떻게 전달할 수 있습니까? 내가 제안한 해결 방법은 nil을 otherButtonTitles :에 전달한 다음 addButtonWithTitle :을 사용하여 버튼 제목을 개별적으로 지정하는 것입니다. 그러나 이것은 “취소”버튼을 UIActionSheet의 마지막 위치가 아닌 첫 번째 위치로 이동시키는 문제가 있습니다. 나는 그것이 마지막이기를 원합니다.

1) 문자열의 변수 목록 대신 배열을 전달하거나 2) 취소 버튼을 UIActionSheet의 맨 아래로 이동하는 방법이 있습니까?

감사.



답변

이 작업을 수행했습니다 (일반 버튼으로 확인하고 다음에 추가하십시오.

NSArray *array = @[@"1st Button",@"2nd Button",@"3rd Button",@"4th Button"];

    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Title Here"
                                                             delegate:self
                                                    cancelButtonTitle:nil
                                               destructiveButtonTitle:nil
                                                    otherButtonTitles:nil];

    // ObjC Fast Enumeration
    for (NSString *title in array) {
        [actionSheet addButtonWithTitle:title];
    }

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

    [actionSheet showInView:self.view];


답변

작은 참고 사항 : [actionSheet addButtonWithTitle :]은 해당 버튼의 색인을 반환하므로 안전하고 “깨끗”하려면 다음과 같이 할 수 있습니다.

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


답변

Jaba와 Nick의 답변을 가져 와서 조금 더 확장하십시오. 이 솔루션에 파괴 버튼을 통합하려면 :

// Create action sheet
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:title
                                                         delegate:self
                                                cancelButtonTitle:nil
                                           destructiveButtonTitle:nil
                                                otherButtonTitles:nil];
// Action Buttons
for (NSString *actionName in actionNames){
    [actionSheet addButtonWithTitle: actionName];
}

// Destruction Button
if (destructiveName.length > 0){
    [actionSheet setDestructiveButtonIndex:[actionSheet addButtonWithTitle: destructiveName]];
}

// Cancel Button
[actionSheet setCancelButtonIndex: [actionSheet addButtonWithTitle:@"Cancel"]];

// Present Action Sheet
[actionSheet showInView: self.view];


답변

응답에 대한 빠른 버전이 있습니다.

//array with button titles
private var values = ["Value 1", "Value 2", "Value 3"]

//create action sheet
let actionSheet = UIActionSheet(title: nil, delegate: self, cancelButtonTitle: nil, destructiveButtonTitle: nil)
//for each value in array
for value in values{
    //add a button
    actionSheet.addButtonWithTitle(value as String)
}
//display action sheet
actionSheet.showInView(self.view)

선택된 값을 얻으려면 ViewController에 delegate를 추가하십시오.

class MyViewController: UIViewController, UIActionSheetDelegate

그리고 “clickedButtonAtIndex”메소드를 구현합니다.

func actionSheet(actionSheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int) {
    let selectedValue : String = values[buttonIndex]
}


답변