UIScrollView и пак клавиатурата скрива текста

Имам uiscrollview, 2 полета за текстови изгледи и прочетох всички публикации за скриване на текстов изглед от клавиатурата и изпробвах много методи, но въпреки това го скрива.

Моят код е като този: 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];
}

Има делегиране от изгледа за превъртане и заглавие на кампанията, описание на кампанията.

Какво не е наред? защо клавиатурата все още крие долния 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