UIScrollView и все же клавиатура скрывает текст

У меня есть uiscrollview, 2 textviewfields, и я прочитал все сообщения о клавиатуре, скрывающей текстовое представление, и перепробовал много методов, но все равно скрывает его.

Мой код такой: ViewController.h

@property(nonatomic,retain) IBOutlet UITextView *campaignTitle;
@property (weak, nonatomic) IBOutlet UITextView *campaignDescription;
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property UITextView *activeTextView;

ViewController.m

@synthesize campaignTitle;
@synthesize campaignDescription;
@synthesize scrollView;
@synthesize activeTextView;

#define SCROLLVIEW_CONTENT_HEIGHT 460
#define SCROLLVIEW_CONTENT_WIDTH  320

- (void)viewDidLoad
{
 [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWasShown:)
                                                 name:UIKeyboardDidShowNotification
                                               object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillHide:)
                                                 name:UIKeyboardWillHideNotification
                                               object:nil];
    scrollView.contentSize=CGSizeMake(0, self.view.frame.origin.y+self.view.frame.size.height+50);
    [super viewDidLoad];
}

- (BOOL) textViewShouldBeginEditing:(UITextView *)textView
{
    textView.text = @"";
    self.activeTextView = textView;
    return YES;
}

- (BOOL) textViewShouldEndEditing:(UITextView *)textView
{
     self.activeTextView = nil;
    return YES;
}

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if([text isEqualToString:@"\n"])
        [textView resignFirstResponder];
    return YES;
}

- (void)keyboardWasShown:(NSNotification *)notification
{   
    // Step 1: Get the size of the keyboard.
    CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
    // Step 2: Adjust the bottom content inset of your scroll view by the keyboard height.
    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardSize.height, 0.0);
    scrollView.contentInset = contentInsets;
    scrollView.scrollIndicatorInsets = contentInsets;
    // Step 3: Scroll the target text field into view.
    CGRect aRect = self.view.frame;
    aRect.size.height -= keyboardSize.height;
    if (!CGRectContainsPoint(aRect, activeTextView.frame.origin) ) {
        CGPoint scrollPoint = CGPointMake(0.0, activeTextView.frame.origin.y - (keyboardSize.height-15));
        [scrollView setContentOffset:scrollPoint animated:YES];
    }
}

- (void) keyboardWillHide:(NSNotification *)notification {

    UIEdgeInsets contentInsets = UIEdgeInsetsZero;
    scrollView.contentInset = contentInsets;
    scrollView.scrollIndicatorInsets = contentInsets;
}

- (IBAction)dismissKeyboard:(id)sender
{
    [self.activeTextView resignFirstResponder];
}

Есть делегирование из представления прокрутки и кампанииTitle, кампанииОписание.

Что не так? почему клавиатура все еще скрывает нижний uitextview? Дополнительный код, который вы можете увидеть, предназначен для поддержки кнопки «Возврат» в UITextView.


person Dejell    schedule 10.09.2012    source источник


Ответы (2)


Убедитесь, что ваши UITextFields на самом деле находятся внутри вашего UIScrollView внутри вашей раскадровки и случайно не помещены в UIView под ним.

setContentOffset должен делать ЧТО-ТО, даже если это не предполагаемый эффект. Поскольку, похоже, он ничего не делает, я подозреваю, что либо ваши UITextFields не являются его подвидами, либо ваш UIScrollView не подключен в построителе интерфейса.

person MikeS    schedule 10.09.2012

Или используйте TPKeyboardAvoiding. Он отлично работает и очень прост в настройке:

  1. Добавьте UIScrollView в xib вашего контроллера представления.
  2. Установите класс представления прокрутки на TPKeyboardAvoidingScrollView (все еще в xib, через инспектор идентификации)
  3. Поместите все свои элементы управления в этот вид прокрутки

Он также автоматически подключает кнопки «Далее» на клавиатуре для переключения между текстовыми полями.

person Cristina Sita    schedule 12.02.2014
comment
Спасибо за это! Кажется несколько обратным, что iOS не заботится об этом самостоятельно. - person Merkidemis; 20.07.2014