【问题标题】:Keep UIKeyboard with view when swiping back iOS 7滑回 iOS 7 时保持 UIKeyboard 可见
【发布时间】:2014-03-22 15:32:34
【问题描述】:

我有一个可以使用新的 interactivePopGestureRecognizer 弹出的视图控制器。如果存在键盘并且滑动动画开始,则键盘不会随视图移动。我看过这个question 并在我的视图控制器中像这样实现它,它被解雇了

-(void)viewWillDisappear:(BOOL)animated
{ 
  [super viewWillDisappear:animated];

  [self.transitionCoordinator animateAlongsideTransitionInView:self.aTextInputView.keyboardSuperView animation:^(id<UIViewControllerTransitionCoordinatorContext> context) {

    CGRect frame = self.aTextInputView.keyboardSuperView.frame;
    frame.origin.x = self.view.frame.size.width;

    self.aTextInputView.keyboardSuperView.frame = frame;

  } completion:nil];
}

现在,当视图动画消失时,我得到的是键盘动画离开屏幕到 320 的 x 点,这是有道理的,因为这就是我设置的,我的问题是如何让键盘与向后滑动?

更新

对于任何在视图消失时看到奇怪动画的人,您可以通过这样做来移除键盘。

[self.transitionCoordinator notifyWhenInteractionEndsUsingBlock:^(id<UIViewControllerTransitionCoordinatorContext> context){
    if (![context isCancelled]) {
        [keyboardSuperview removeFromSuperview];
    }
}];

【问题讨论】:

  • +1 更新!那个生涩的动画真的让我很烦,你的 sn-p 就像修复它的魅力!
  • 感谢您的更新!奇怪的键盘动画困扰了我一段时间!

标签: ios cocoa-touch ios7 core-animation uikeyboard


【解决方案1】:

您的 sn-p 中有很多自定义代码,如果我错了,请纠正我,但您似乎有不正确的 self.aTextInputView.keyboardSuperView

仔细检查它不是nil。如果是,您忘记添加inputAccessoryView

这里是完整的代码 sn-p 没有任何扩展:

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    UIView *keyboardSuperview = self.textField.inputAccessoryView.superview;
    [self.transitionCoordinator animateAlongsideTransitionInView:keyboardSuperview
                                                       animation:
     ^(id<UIViewControllerTransitionCoordinatorContext> context) {
         CGRect keyboardFrame = keyboardSuperview.frame;
         keyboardFrame.origin.x = self.view.bounds.size.width;
         keyboardSuperview.frame = keyboardFrame;
     }
                                                      completion:nil];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.textField.inputAccessoryView = [[UIView alloc] init];
}

【讨论】:

  • 如果我 NSLog(@"%@", self.aTextInputView.keyboardSuperView); 我得到 &lt;UIPeripheralHostView: 0x8c369a0; frame = (0 352; 320 216); autoresizesSubviews = NO; layer = &lt;CALayer: 0x8c36a80&gt;&gt; 我认为这是我想要的?
  • 是的...我尝试使用 Xcode 向导创建一个空白的 MasterDetail 应用程序,在 DetailViewController 情节提要上添加了一个 UITextField,将上面的代码粘贴到同一个控制器上,并且它可以工作。
  • 嗯,奇怪的是直接在 viewController 中添加了输入视图,现在它似乎可以工作了。当它被添加到自定义视图类中时,它会导致该错误。需要对此进行更多实验。感谢您的帮助。
  • 一旦视图消失,键盘会迅速回到 x=0 然后消失,有什么办法可以摆脱它?
  • 这在 iOS9 上不适合我...有人知道如何使这个动画工作吗?
【解决方案2】:

刚刚找到适用于 iOS8 的非常简单的解决方案

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    [self.aTextInputView resignFirstResponder];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多