0

我希望我的 UIView 在显示键盘时动画到一个新位置,所以使用了UIKeyboardWillShowNotificationand UIKeyboardWillChangeFrameNotification。问题是,当设备在没有键盘的情况下旋转时,视图会自动调整大小并按应有的方式旋转 - 它看起来很完美。

不幸的是,在显示键盘的情况下,旋转设备会发送这些通知,因此执行 UIView 动画作为响应会给它一个奇怪的动画。最好将其描述为看起来像是跳到了一个新位置,然后被一个角锚定到新的方向。也许你知道我在说什么。

我有什么方法可以检测设备何时旋转或在显示键盘时旋转时处理问题?

4

3 回答 3

0

对于方向变化检测,使用UIDeviceOrientationDidChangeNotification.

于 2013-08-05T17:23:03.473 回答
0

我想下面的代码会帮助你..

@property(nonatomic,strong)BOOL keyBoardShow;


- (void)viewDidLoad
{
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillBeShown:)
                                                 name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillBeHidden:)
                                                 name:UIKeyboardWillHideNotification object:nil];


    [super viewDidLoad];
}
-(void)keyboardWillBeShown:(NSNotification *)aNotification {
    keyBoardShow = YES;
}


-(void)keyboardWillBeHidden:(NSNotification *)aNotification {
    keyBoardShow = NO;
}

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    if (keyBoardShow) {
        // Do the needful when the keyboard is shown

    }else{

    }
}

只需在keyboardWillBeShown 和keyboardWillBeHidden 委托方法中设置布尔值。并在 willRotateToInterfaceOrientation 中做你的 uiview 位置。

于 2013-08-05T17:31:19.380 回答
-1

与其依靠内置通知,不如先依靠触发键盘显示的原因?我猜当特定的 UITextField 成为第一响应者时,键盘会弹出。你应该可以使用它。

为该 UITextField 注册一个委托并实现 -textFieldDidBeginEditing:。委托应该是一个视图控制器。然后,为了保持松散耦合,请发布您自己的委托通知并为此注册您的视图。

这需要更多的工作,但它可以让您更好地控制。

- (void)textFieldDidBeginEditing:(UITextField *)textField  

Apple 文档:UITextFieldDelegate 协议

于 2013-08-05T18:39:50.167 回答