Tôi đang gặp sự cố với mã của mình. Tôi đang cố gắng di chuyển UIScrollView
khi tôi đang chỉnh sửa một tài UITextField
liệ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 UITextField
mà 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 UITextField
chỉ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?