我在UIActionSheet
中提出了一个非常简单的选择器直到iOS 8。现在,它似乎已经破坏了最新更新的功能。它从未受到支持,而且一直以来都不鼓励这种做法。
据推测,整个UIActionSheet
功能已弃用,未来不会支持。文档说使用UIAlertController。
我尝试过切换到UIAlertController
,实际上发现了我最初期望的解决方案,而不是我原来提出的解决方案。
我的原始代码:
// Ask user for project to associate the new issue with a project
UIActionSheet *menu = [[UIActionSheet alloc] initWithTitle:NSLocalizedString(@"Select Project", @"Title for Action Sheet")
delegate:self
cancelButtonTitle:klocalized_CancelButtonTitle
destructiveButtonTitle:nil
otherButtonTitles:klocalized_SelectButtonTitle ,nil];
[menu addSubview:self.projectPicker];
[menu showFromTabBar:self.tabBarController.tabBar];
[menu setBounds:CGRectMake(0, 0, 320, 700)];
在iOS 7中工作正常。
我的新代码。看起来更好,但由于某种原因,我无法让UITextField
尊重inputView
属性的设置。它使用标准键盘显示我的文本字段,否则这将是一个可接受的替代方案,甚至比我认为的原始文件更好。
新功能,iOS 8正在进行中:
// is iOS 8, ActionSheet, newly deprecated, will not allow subviews. Use UIAlertController instead
NSString *title = NSLocalizedString(@"Select Project", @"Title for Action Sheet");
UIAlertController *projectSelector = [UIAlertController alertControllerWithTitle:title message:nil preferredStyle:UIAlertControllerStyleAlert];
[projectSelector addAction:[UIAlertAction actionWithTitle:klocalized_CancelButtonTitle style:UIAlertActionStyleCancel handler:nil]];
[projectSelector addAction:[UIAlertAction actionWithTitle:klocalized_SelectButtonTitle style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
// Do my button action stuff here
}]];
[projectSelector addTextFieldWithConfigurationHandler:^(UITextField *textField) {
// projectField is lazily created property.
//My picker is set as its inputView but standard keyboard is always presented instead.
textField = self.projectField;
}];
[self presentViewController:projectSelector animated:YES completion:^{
// Do my final work here
}];
谁能告诉我为什么会这样?新inputView
视图中UITextfield
的{{1}}属性是否无法使用?有没有人以这种方式使用UIAlertController
成功?
我还没有包含UIPickerView
或projectField
属性的代码,但我已经过测试和检查。他们确实创建了有效的对象我的演示VC保留了选择器,文本字段很弱,由我假设的AlertViewController拥有。我试着保留它,但没有效果。
我确实收到projectPicker
来自文本字段的委托调用,所以我知道它是我创建的对象。当我清楚地将pickerView设置为UITextField
时,我认为没有理由显示标准键盘。
在屏幕截图中查看结果视图:
答案 0 :(得分:3)
将我的头撞在桌子上一段时间之后,我找到了解决办法,好吧,我的意思是我发现了我所犯的愚蠢错误。
我正在向后执行textField配置。我认为目的是传递textField参数我的文本字段,当我应该设置给定的文本字段的属性。
只需更改为
// is iOS 8, ActionSheet, newly deprecated, will not allow subviews. Use UIAlertController instead
NSString *title = NSLocalizedString(@"Select Project", @"Title for Action Sheet");
UIAlertController *projectSelector = [UIAlertController alertControllerWithTitle:title message:nil preferredStyle:UIAlertControllerStyleAlert];
[projectSelector addAction:[UIAlertAction actionWithTitle:klocalized_CancelButtonTitle style:UIAlertActionStyleCancel handler:nil]];
[projectSelector addAction:[UIAlertAction actionWithTitle:klocalized_SelectButtonTitle style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
}]];
[projectSelector addTextFieldWithConfigurationHandler:^(UITextField *textField) {
//Set the properties of the textField provided. DO NOT CREATE YOUR OWN.
[textField setPlaceholder:NSLocalizedString(@"Make Selection", @"PlaceHolder for project field when awaiting picker choice")];
[textField setInputView:self.projectPicker];
[textField setDelegate:self];
self.projectField = textField;
}];
[self presentViewController:projectSelector animated:YES completion:^{
}];