iOS AlertView 应用程序扩展

iOS AlertView App Extension

我在自定义 keyboard (iOS App Extension) 工作。 I have a UICollectionView in my Keyboard Layout, so when one item is selected I want to show a message (UIAlerView for example) .

这是我的代码:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{

 ...

UIAlertController * alert=   [UIAlertController
                              alertControllerWithTitle:@"My Title"
                              message:@"Enter User Credentials"
                              preferredStyle:UIAlertControllerStyleAlert];
[self presentViewController:alert animated:YES completion:nil];
}

我收到此错误:'Feature not available in extensions of type com.apple.keyboard-service'

所以...有什么方法可以从 App Extension 显示 message 吗?

编辑:

这是一个例子。 IKEA Emoticons Keyboard 显示一条消息(类似于选择一项后的 Android Toast)。

我也试过这个库:

iOS Toast Library

遗憾的是,没有办法在键盘扩展中显示 UIAlertView。实际上,在 InputViewController 的 frame 之上,什么都不能显示。 Apple 的文档中非常清楚:

...a custom keyboard can draw only within the primary view of its UIInputViewController object... it is not possible to display key artwork above the top edge of a custom keyboard’s primary view, as the system keyboard does on iPhone when you tap and hold a key in the top row.

至于键盘内的消息,有一些有用的库可以帮助我们。例如 https://github.com/scalessec/Toast and https://github.com/sergeylenkov/PTHintController

我终于解决了这个问题。这不是最好的解决方案,但至少我得到了我想要的效果。

我在 xib 文件中创建了一个 View 模拟 Toast,并将其设置为 hidden

选中项目后,我显示 "faked" Toast 2 秒,然后再次隐藏它。

self.popUpView.hidden = NO;

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 2.0 * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    self.popUpView.hidden = YES;
});

我不知道这是否是一个好的解决方案,但我确实必须为此找到解决方案。

对于 Swift 你可以使用这个 :

self.popUpView.isHidden = false
    DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
        self.popUpView.isHidden = true
    }