Перемещение UIView вверх, когда показана клавиатура - PullRequest
3 голосов
/ 07 марта 2011

Я знаю, что это частый вопрос, но мне не повезло реализовать его из примеров, которые я нашел. Я мог бы сделать что-то простое неправильно .. (будем надеяться). я пытаюсь переместить UIview вверх, так как текстовое поле скрыто внизу.

Немного о моем приложении, оно имеет контроллер панели вкладок и реализует стандартный UIView. Когда я добавляю код для перемещения дисплея, ничего не происходит. Нужно ли иметь представление прокрутки, чтобы это работало, это конфликт с контроллером вкладок или я делаю что-то еще неправильно? спасибо

Dan

Ответы [ 2 ]

6 голосов
/ 07 марта 2011

Я написал небольшую категорию в UIView, которая управляет временной прокруткой без необходимости оборачивать все это в UIScrollView. Мое использование глагола «прокрутка» здесь, возможно, не идеально, потому что это может заставить вас думать, что используется представление прокрутки, а это не так - мы просто анимируем положение UIView (или подкласса UIView).

В него встроено несколько магических чисел, соответствующих моей форме и макету, которые могут не соответствовать вашей, поэтому я рекомендую настроить это в соответствии с вашими конкретными потребностями.

UIView + FormScroll.h:

#import <Foundation/Foundation.h>

@interface UIView (FormScroll) 

-(void)scrollToY:(float)y;
-(void)scrollToView:(UIView *)view;
-(void)scrollElement:(UIView *)view toPoint:(float)y;

@end

UIView + FormScroll.m:

#import "UIView+FormScroll.h"


@implementation UIView (FormScroll)


-(void)scrollToY:(float)y
{

    [UIView beginAnimations:@"registerScroll" context:NULL];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDuration:0.4];
    self.transform = CGAffineTransformMakeTranslation(0, y);
    [UIView commitAnimations];

}

-(void)scrollToView:(UIView *)view
{
    CGRect theFrame = view.frame;
    float y = theFrame.origin.y - 15;
    y -= (y/1.7);
    [self scrollToY:-y];
}


-(void)scrollElement:(UIView *)view toPoint:(float)y
{
    CGRect theFrame = view.frame;
    float orig_y = theFrame.origin.y;
    float diff = y - orig_y;
    if (diff < 0) {
        [self scrollToY:diff];
    }
    else {
        [self scrollToY:0];
    }

}

@end

Импортируйте это в свой UIViewController, и тогда вы можете сделать

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    [self.view scrollToView:textField];
}

-(void) textFieldDidEndEditing:(UITextField *)textField
{
    [self.view scrollToY:0];
    [textField resignFirstResponder];
}

... или что угодно. Эта категория дает вам три довольно хороших способа отрегулировать положение вида.

1 голос
/ 07 марта 2011

Самый простой способ - поместить вашу форму в UITableViewCell и поместить ячейку в UITableView.Если затем, UITableView будет обрабатывать большинство работ автоматически и точно так же с приложениями Apple.Я видел это в какой-то другой статье или ответе, но я не могу вспомнить, где я это видел.

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

...