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