Tôi đang gặp sự cố với mã của mình. Tôi đang cố gắng di chuyển UIScrollViewkhi tôi đang chỉnh sửa một tài UITextFieldliệu sẽ được ẩn bởi cửa sổ bật lên trên bàn phím.
Tôi đang di chuyển khung chính ngay bây giờ vì tôi không biết cách 'cuộn lên' trong mã. Vì vậy, tôi đã làm một chút mã, nó hoạt động tốt nhưng khi tôi chỉnh sửa một UItextfield và tôi chuyển sang một trường khác UITextFieldmà không cần nhấn vào nút 'quay lại', chế độ xem chính sẽ đi xa.
Tôi đã thực hiện NSLog()với các biến size, distance và textFieldRect.origin.y của mình như bạn có thể thấy bên dưới. Khi tôi đặt hai mã UITextFieldở cùng một vị trí (nguồn gốc y) và tôi thực hiện 'chuyển đổi' cụ thể này (wihtout nhấn quay lại), tôi nhận được các số giống nhau, trong khi mã của tôi hoạt động tốt cho lần UITextFieldchỉnh sửa đầu tiên nhưng không hoạt động tốt cho lần chỉnh sửa thứ hai.
Kiểm tra cái này:
- (void)textFieldDidBeginEditing:(UITextField *)textField {
{
int size;
CGRect textFieldRect = [self.view.window convertRect:textField.bounds fromView:textField];
size = textFieldRect.origin.y + textFieldRect.size.height;
if (change == FALSE)
{
size = size - distance;
}
if (size < PORTRAIT_KEYBOARD_HEIGHT)
{
distance = 0;
}
else if (size > PORTRAIT_KEYBOARD_HEIGHT)
{
distance = size - PORTRAIT_KEYBOARD_HEIGHT + 5; // +5 px for more visibility
}
NSLog(@"origin %f", textFieldRect.origin.y);
NSLog(@"size %d", size);
NSLog(@"distance %d", distance);
CGRect viewFrame = self.view.frame;
viewFrame.origin.y -= distance;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];
[self.view setFrame:viewFrame];
[UIView commitAnimations];
change = FALSE;
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
change = TRUE;
CGRect viewFrame = self.view.frame;
viewFrame.origin.y += distance;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];
[self.view setFrame:viewFrame];
[UIView commitAnimations];
}
Bất kỳ ý tưởng?
