2014-01-13 2 views
1

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

Через следующий код я могу управлять редактированием строки. Это работает нормально.

textView.text = ((ANFreeEditCell*)[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:[self.tableView indexPathForCell:cell].row inSection:0]]).getTekst; 

Возможно также, что отредактирована одна из нижних строк в таблице. В этом случае окно клавиатуры помещается поверх таблицы, а self.tableView indexPathForCell:cell].row возвращает нулевую строку (0).

didSelectRowAtIndexPath никогда не вызывается.

Как я могу получить доступ к этим строкам?

ответ

1

Вы можете установить смещение содержимого таблицы, чтобы он программно прокручивался. Зарегистрируйтесь для UIKeyboardDidShowNotification и прокрутите таблицу так, чтобы отредактированная строка не скрывалась за клавиатурой. Я не тестировал его, но считаю, что он должен работать

Надеюсь, это поможет.

Учитывая предложение Саймона

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didShowKeyBoard:) name:UIKeyboardDidShowNotification object:nil]; 

-(void)didShowKeyBoard:(NSNotification *)notif 
{ 
    float offset = //Value through which you need the tableview to scroll 
    CGRect cellRect = [self.tableView rectForRowAtIndexPath:_editCellIndexPath]; 
    CGPoint scrollPoint = CGPointMake(0.0, cellRect.origin.y - (offset-self.tableView.contentOffset.y)); 
    [self.tableView setContentOffset:scrollPoint animated:YES]; 
} 
+0

... пример кода может быть приятным? –

+0

Это выглядит многообещающе. Благодаря! – Vincent

0

Вам нужно добавить observer из keyboard notification внутри метода позволяет сказать viewDidLoad внутри, которые включают это два NSNotification, который будет вызывать, когда keyboard будет скрывать и показывать: -

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

[[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(keyboardWillShow:) 
    name:UIKeyboardWillShowNotification 
    object:self.view.window]; 

Теперь после этого реализуют два метода скрытия и отображения клавиатуры соответственно, а затем просто установите фрейм вашего tableview, зависит от вашего v размер. Напр.

- (void)keyboardWillHide:(NSNotification *)notification 
{ 
    //return it to its original position 
    [self.tableView setFrame:CGRectMake(3, 403, 695, 353)]; 
} 

- (void)keyboardWillShow:(NSNotification *)notification 
{ 
    //Or where ever you want the tableView to go 
    [self.tableView setFrame:CGRectMake(3, 65, 695, 353)]; 
} 
+0

Вам не нужно оставлять комментарии повсюду, говоря людям, чтобы посмотреть на ваш ответ. Это не очень классно. – Abizern

+0

Спасибо за ваш ответ. К сожалению, это не отвечает на мой вопрос, это не связано с вопросом. Вопрос в том, как узнать, какая строка редактируется. – Vincent

Смежные вопросы