source

UIAction 만들기변수 목록이 아닌 배열로 전달하여 '기타 단추'를 시트합니다.

manycodes 2023. 6. 6. 00:09
반응형

UIAction 만들기변수 목록이 아닌 배열로 전달하여 '기타 단추'를 시트합니다.

UIAction의 단추 제목에 사용할 문자열 배열이 있는 경우Sheet. 안타깝게도 메서드 호출의 다른 ButtonTitles: 인수에는 배열이 아닌 문자열의 가변 길이 목록이 사용됩니다.

UIAction에 이러한 제목을 전달하려면 어떻게 해야 합니까?시트? 제가 제안한 해결 방법은 다른 버튼 제목에 0을 전달한 다음 addButtonWithTitle:을 사용하여 버튼 제목을 개별적으로 지정하는 것입니다.그러나 이것은 UIAction의 첫 번째 위치로 "Cancel" 버튼을 이동시키는 문제가 있습니다.마지막이 아니라 시트입니다. 마지막이 되었으면 합니다.

1) 변수 문자열 목록 대신 배열을 전달하거나, 또는 2) 취소 버튼을 UIAction 하단으로 이동하는 방법이 있습니까?시트?

감사해요.

나는 이것이 작동하도록 했습니다. (일반 버튼을 사용하고 다음과 같이 추가하면 됩니다.)

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];

하나의 작은 메모: [액션]Sheet addButtonWithTitle:]은(는) 해당 버튼의 인덱스를 반환하므로 안전하고 "정리"하기 위해 다음 작업을 수행할 수 있습니다.

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

자바와 닉의 답변을 받아 조금 더 확장합니다.이 솔루션에 파괴 버튼을 통합하려면:

// 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에 대리자를 추가합니다.

class MyViewController: UIViewController, UIActionSheetDelegate

그리고 "clickedButtonAt" 메서드를 구현합니다.색인"

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

언급URL : https://stackoverflow.com/questions/2384044/create-uiactionsheet-otherbuttons-by-passing-in-array-not-varlist

반응형