无法在 iOS8 上的 UIAlertController 中显示 UIPickerView

Posted

技术标签:

【中文标题】无法在 iOS8 上的 UIAlertController 中显示 UIPickerView【英文标题】:Not able to show UIPickerView inside UIAlertController on iOS8 【发布时间】:2014-11-04 13:12:01 【问题描述】:

之前我使用的是 UIactionSheet,但由于它已被弃用,我正在尝试使用 UIAlertController 来显示 UIPicker。 这是我用来将选择器添加到 UIAlertController 的一段代码。

        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"some_title"
                                                                             message:nil
                                                                      preferredStyle:UIAlertControllerStyleActionSheet];
    [alertController setModalPresentationStyle:UIModalPresentationPopover];
    [alertController.view addSubview:_formatPickerView];
    UIPopoverPresentationController *popPresenter = [alertController
                                                     popoverPresentationController];
    // cell is a cell from a tableview
    popPresenter.sourceView = cell;
    popPresenter.sourceRect = cellRect;
    [self presentViewController:alertController animated:NO completion:nil];

这会调出 AlertController 但没有 Picker。

一个有趣的观察是,如果我在

中更改 preferredStyle

[UIAlertController alertControllerWithTitle:@"some_title" message:nil preferredStyle:UIAlertControllerStyleActionSheet];

UIAlertControllerStyleActionSheetUIAlertControllerStyleAlert 然后我开始获取 Picker 但我失去了对 UIAlertController 位置的控制。

我想要控制 UIAlertController 的位置,所以我使用UIAlertControllerStyleActionSheet

以前有人见过这个问题吗?任何帮助表示赞赏。谢谢!

【问题讨论】:

【参考方案1】:

我通过在UIActionSheet 中显示UIPickerView 解决了这个问题。

UIActionSheet* actionSheet = [[UIActionSheet alloc] initWithTitle:@"\n\n\n\n\n\n\n\n\n\n"
                                                             delegate:nil
                                                    cancelButtonTitle:nil
                                               destructiveButtonTitle:nil
                                                    otherButtonTitles:nil];
    actionSheet.delegate = self;
    [actionSheet addSubview:_formatPickerView];
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
    CGRect cellRect = cell.bounds;
    cellRect.size.width = cell.frame.size.width * 2;
    cellRect.origin.x = -(cell.frame.size.width/2);

    [actionSheet showFromRect:cellRect inView:cell animated:YES];

【讨论】:

以上是关于无法在 iOS8 上的 UIAlertController 中显示 UIPickerView的主要内容,如果未能解决你的问题,请参考以下文章

无法在 iOS8 自定义键盘中获得约束

自定义键盘应用程序扩展 iOS 8 上的 Siri

UITouch 不适用于 ios8

iOS 8 导航栏在 Storyboard 上的第二个 ViewController 中无法访问

UIInterfaceOrientation 无法确定 iOS 7 和 iOS 8 iPhone 上的界面方向

iOS 8 上的 Facebook 登录;登录切换后应用程序无法运行