UIActionSheet в быстрых клавишах Отмена кнопки вверх в iOS 7
Я занимаюсь переписыванием своего приложения с объективного c на Swift, и я заметил, что UIActionSheet ведет себя по-разному в версии Swift, чем в версии obj-c.
Версия Obj-c
![enter image description here]()
Быстрая версия
![enter image description here]()
Это проблема только для iOS 7, она отлично работает (это означает, что отмена находится внизу) на iOS 8 для версий Swift и Obj-c
Вот соответствующий фрагмент кода:
var sheet = UIActionSheet(title: nil, delegate: self, cancelButtonTitle: "Cancel", destructiveButtonTitle: nil)
sheet.addButtonWithTitle("Camera")
sheet.addButtonWithTitle("Photo Library")
sheet.showInView(self.controller.view)
Есть идея, как это исправить?
Ответы
Ответ 1
Оказывается, это был еще один случай поиска ответа сразу после вопроса.
Все, что мне нужно было сделать, это добавить кнопку Отмена в качестве другой кнопки, а затем указать ее индекс:
var sheet = UIActionSheet(title: nil, delegate: self, cancelButtonTitle: nil, destructiveButtonTitle: nil)
sheet.addButtonWithTitle("Camera")
sheet.addButtonWithTitle("Photo Library")
sheet.addButtonWithTitle("Cancel")
sheet.cancelButtonIndex = 2
sheet.showInView(self.controller.view)
Не уверен, изменили ли они, как должен работать UIActionSheet в Swift, или если это ошибка, которую никто не исправляет, поскольку она устарела в iOS 8 в любом случае
Ответ 2
Вот что у меня есть
на viewDidLoad()
или на действие кнопки поместите код следующим образом:
let actionSheet = UIActionSheet(title: nil, delegate: self, cancelButtonTitle: "Cancel", destructiveButtonTitle: "Done", otherButtonTitles: "Yes", "No")
actionSheet.showInView(self.view)
затем добавьте еще одну функцию для своих действий, например:
func actionSheet(actionSheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int)
{
switch buttonIndex{
case 0:
NSLog("Done");
break;
case 1:
NSLog("Cancel");
break;
case 2:
NSLog("Yes");
break;
case 3:
NSLog("No");
break;
default:
NSLog("Default");
break;
//Some code here..
}
}