【问题标题】:iOS AlertView App ExtensioniOS AlertView 应用扩展
【发布时间】:2015-07-01 17:44:53
【问题描述】:

我正在使用自定义 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

【问题讨论】:

    标签: ios ios-app-extension uialertcontroller custom-keyboard


    【解决方案1】:

    这样说很遗憾,但无法在键盘扩展中显示 UIAlertView。实际上,在 InputViewController 的框架之上什么都不能显示。 Apple的文档中很清楚:

    ...自定义键盘只能在其 UIInputViewController 对象的主视图内绘制...无法在自定义键盘主视图的顶部边缘上方显示键图,就像系统键盘在 iPhone 上所做的那样您点击并按住顶行中的一个键。

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

    【讨论】:

    • 是的,我当然已经阅读了 Apple 的文档,但是应该有办法做到这一点,因为我已经在某些应用程序中看到了该功能,例如 itunes.apple.com/gb/app/ikea-emoticons/id958943883?mt=8
    • @Ale 嗯,这是新的。可以放个截图什么的吗?
    • 现在我明白了。这只是键盘内的消息。我在想github.com/scalessec/Toast 是你需要的。
    • 不,它不起作用...我收到此错误unrecognized selector sent to instance ...'
    • 无论如何,关键是,它与键盘扩展无关了。只是如何使用这个 Toast 库。
    【解决方案2】:

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

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

    当项目被选中时,我将“伪造”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
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-24
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多