NSNotification проблема для текстового поля и textview - PullRequest
1 голос
/ 19 декабря 2009

На самом деле у меня есть текстовое поле в шестом разделе табличного представления и текстовое представление в одиннадцатом разделе текстового обзора. Моя проблема в том, что когда я нажимаю на текстовое поле шестого раздела, клавиатура закрывает текстовое поле, и то же самое было происходит с textview.for, что я использовал NSNotificationCenters. и я написал код как:

- (Недействительными) viewWillAppear: (BOOL) анимированный {

tableView.tableFooterView=nil;
[self reloadView];  
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) 
                                             name:UIKeyboardWillShowNotification object:self.view.window]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) 
                                             name:UIKeyboardWillHideNotification object:self.view.window];
[tableView reloadData]; 

}

- (Недействительными) setViewMovedUp: (BOOL) movedUp {

[UIView beginAnimations: nil context: NULL]; [UIView setAnimationDuration: 0,5]; // если вы хотите увеличить вид CGRect rect = mview.frame; если (MoveUp) {
rect.origin.y = rect.origin.y - kOFFSET_FOR_KEYBOARD; rect.size.height = rect.size.height + kOFFSET_FOR_KEYBOARD; } еще { rect.origin.y = rect.origin.y + kOFFSET_FOR_KEYBOARD; rect.size.height = rect.size.height - kOFFSET_FOR_KEYBOARD; } mview.frame = rect;

[UIView commitAnimations];

}

  • (void) клавиатураWillShow: (NSNotification *) уведомление { // printf ("\ n Keyboard Will SHOW"); // теперь будет показана клавиатура. в зависимости от того, какое текстовое поле активно, двигайтесь вверх или вниз соответственно

    if ([notesTextView isFirstResponder] && mview.frame.origin.y> = 0) {
    [self setViewMovedUp: YES]; } иначе если (! [notesTextView isFirstResponder] && mview.frame.origin.y

    else if ([wineryTextField isFirstResponder] && mview.frame.origin.y> = 0) {
    [self setViewMovedUp: YES]; } иначе если (! [wineryTextField isFirstResponder] && mview.frame.origin.y <0) { [self setViewMovedUp: NO]; } </p>

}

  • (void) клавиатураWillHide: (NSNotification *) уведомление { // printf ("\ n Keyboard Hide"); // теперь будет показана клавиатура. в зависимости от того, какое текстовое поле активно, двигайтесь вверх или вниз соответственно,

    if ([notesTextView isFirstResponder] && mview.frame.origin.y> = 0) { [self setViewMovedUp: YES]; } иначе если (! [notesTextView isFirstResponder] && mview.frame.origin.y <0) { [self setViewMovedUp: NO]; } </p>

    else if ([wineryTextField isFirstResponder] && mview.frame.origin.y> = 0) { [self setViewMovedUp: YES]; } иначе если (! [wineryTextField isFirstResponder] && mview.frame.origin.y <0) { [self setViewMovedUp: NO]; } </p>

}

  • (BOOL) textView: (UITextView *) textView shouldChangeTextInRange: (NSRange) диапазон замещающий текст: (NSString *) текст { if ([text isEqualToString: @ "\ n"]) {

    //event.eventNotes = notesTextView.text;
    
     if(textView==notesTextView)
    {
    
        //[self setViewMovedUp:NO];
        [textView resignFirstResponder];
    }
    return NO;
    

    }

    возврат ДА;

}

  • (BOOL) textFieldShouldReturn: (UITextField *) textField {

    if (textField == wineryTextField) { [self setViewMovedUp: NO]; [wineryTextField resignFirstResponder]; } }

Выше приведен код, который я написал для прокрутки представления. Но проблема в том, что когда я нажимаю на текстовое поле, оно прокручивается вниз, а не прокручивается вверх. То же самое происходило с textView. Проблема возникала, когда Я перехожу к другому контроллеру, возвращаюсь и нажимаю на текстовое поле или текстовое представление.

Пожалуйста, дайте идеальное решение для моей проблемы.

Спасибо всем вам, ребята .....

1 Ответ

0 голосов
/ 19 декабря 2009

Вы можете рассмотреть возможность использования следующего метода UITableView:

- (void)selectRowAtIndexPath:(NSIndexPath *)indexPath
                    animated:(BOOL)animated
              scrollPosition:(UITableViewScrollPosition)scrollPosition

Где indexPath содержит строку, которую вы хотите показать вверху, а scrollPosition - UITableViewScrollPositionTop.

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

- (NSArray *)indexPathsForVisibleRows

А затем с помощью первого метода, упомянутого выше, перейдите к сохраненной строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...