2013-02-21 2 views
0

Я хочу прокрутить представление, когда вы фокусируетесь на текстовое поле, которое находится в ячейке таблицы. Я хочу получить y текстового поля, в настоящее время я извлекаю в соответствии с ячейкой. но я хочу это, по мнению.Прокрутить представление в текстовом поле ячейки UITableView

В настоящее время у меня есть жестко закодированные значения.

CGRect aRect = self.view.frame; 

aRect.size.height -= kbSize.height; 
CGRect cellRect = activeField.frame; 
cellRect.origin.y = 350; 

if (!CGRectContainsPoint(aRect, cellRect.origin)) { 

    CGPoint scrollPoint = CGPointMake(0.0, cellRect.origin.y - kbSize.height); 

    [scrollView setContentOffset:scrollPoint animated:YES]; 

} 

Есть ли возможность получить поданную высоту по представлению.

+0

Почему бы не реализовать UITextView вместо UIScrollView внутри UITableViewCell ?? – AppleDelegate

+0

Я хочу создать форму входа в стиле списка. Я создал пользовательскую ячейку, содержащую метку и текстовое поле. TableView находится в режиме прокрутки. – Arahim

ответ

1

Было бы лучше, если вы выделите ячейку с помощью scrollToRowAtIndexPath вместо пролистывания сам вид ...

[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:row inSection:0] atScrollPosition:UITableViewScrollPositionMiddle animated:YES]; 
+0

Я думаю, нужно также изменить размер теплиц? – Arahim

+0

Почему? Сделайте его подходящим по всему экрану ... – apascual

+0

не нужно, я очень близко – Arahim

0
CGFloat animatedDistance; 
static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3; 
static const CGFloat MINIMUM_SCROLL_FRACTION = 0.2; 
static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.8; 
static const CGFloat PORTRAIT_KEYBOARD_HEIGHT = 215; 
static const CGFloat LANDSCAPE_KEYBOARD_HEIGHT = 140; 

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 

    CGRect textFieldRect = [self.view.window convertRect:textField.bounds fromView:textField]; 
    CGRect viewRect = [self.view.window convertRect:self.view.bounds fromView:self.view]; 
    CGFloat midline = textFieldRect.origin.y + 0.5 * textFieldRect.size.height; 
    CGFloat numerator = midline - viewRect.origin.y - MINIMUM_SCROLL_FRACTION * viewRect.size.height; 
    CGFloat denominator = (MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION) * viewRect.size.height; 
    CGFloat heightFraction = numerator/denominator; 
    if (heightFraction < 0.0) 
    { 
     heightFraction = 0.0; 
    } 
    else if (heightFraction > 1.0) 
    { 
     heightFraction = 1.0; 
    } 
    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
    if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) 
    { 
     animatedDistance = floor(PORTRAIT_KEYBOARD_HEIGHT * heightFraction); 
    } 
    else 
    { 
     animatedDistance = floor(LANDSCAPE_KEYBOARD_HEIGHT * heightFraction); 
    } 

    CGRect viewFrame = self.view.frame; 
    viewFrame.origin.y -= animatedDistance; 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION]; 
    [toolbar setAlpha:1]; 
    [tbl setContentOffset:CGPointMake(0, [tbl contentOffset].y + 1.35*animatedDistance)]; 
    [UIView commitAnimations]; 
} 
+0

Плохая идея для жесткого кодирования размера клавиатуры. Вы должны получить размеры клавиатуры от Notification (UIKeyboardWillShowNotification) – Lukas

+0

ok спасибо ... я буду демонстративно делать это в следующий раз .. – Rajneesh071

Смежные вопросы