Перемещение UIView вверх, когда показана клавиатура

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

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

Дэн

2 ответа

Я написал небольшую категорию на 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];
}

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

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

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

Другие вопросы по тегам