Sau khi chuyển sang iOS8, tôi nhận được hành vi lạ khi tôi di chuyển chế độ xem trong khi chuyển đổi bàn phím. Bất cứ ai có thể giải thích những gì đang xảy ra?iOS8: Điều gì đang xảy ra với các chế độ xem chuyển động trong quá trình chuyển đổi bàn phím?
Dưới đây là một ví dụ tối thiểu để chứng minh sự cố. Tôi có một cái nhìn đơn giản với một số UITextField
và UIButton
. Hàm nudgeUp
di chuyển trường văn bản và nút tăng 10 điểm. Nó được kích hoạt hoặc bằng gọi lại buttonPressed
hoặc gọi lại keyboardWillShow
.
Khi tôi nhấn vào nút, mã hoạt động như mong đợi: buttonPressed
gọi nudgeUp
và trường văn bản và nút tăng lên 10 điểm.
Khi tôi nhấn vào trường văn bản, keyboardWillShow
gọi nudgeUp
, nhưng hành vi này rất khác. Trường nút và văn bản ngay lập tức nhảy xuống xuống 10 điểm và sau đó trượt trở lại vị trí ban đầu khi bàn phím hiển thị chính nó.
Tại sao điều này lại xảy ra? Làm thế nào tôi có thể lấy lại quyền kiểm soát hoạt ảnh trong khi trình bày bàn phím trong iOS8?
#import "ViewController.h"
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
}
- (void)keyboardWillShow:(NSNotification *)notification
{
// Called when the keyboard appears.
[self nudgeUp];
}
- (IBAction)buttonPressed:(id)sender {
[self nudgeUp];
}
- (void)nudgeUp
{
CGRect newTextFieldFrame = self.textField.frame;
newTextFieldFrame.origin.y -= 10;
self.textField.frame = newTextFieldFrame;
CGRect newButtonFrame = self.button.frame;
newButtonFrame.origin.y -= 10;
self.button.frame = newButtonFrame;
}
@end
Tôi thấy câu hỏi này bởi vì tôi nhìn thấy rằng UIKeyboardWillShowNotification không bao giờ thậm chí được đăng. (Như trong, một điểm ngắt trong bộ chọn được tham chiếu trong cuộc gọi addObserver không bao giờ được nhấn!). Bạn có xác minh rằng thông báo thực sự đang được đăng cho bạn không? (Tôi hỏi vì mặc dù biết rằng iOS 8 và bố cục tự động có thể gây trở ngại, nhưng ứng dụng của tôi đủ lớn để không được xây dựng với bố cục tự động tại chỗ). – tobinjim
Cập nhật: Đã tạo một ứng dụng một cửa sổ mới với một trường văn bản trong đó và các bài đăng thông báo bất kể hộp kiểm AutoLayout ... hmm) – tobinjim
Xin lỗi, không thể giúp bạn. Thông báo chắc chắn đang được đăng trong mã của tôi. – Pitarou