как перейти к следующей ячейке/строке в виде таблицы с помощью textview

Я застрял в этом. Пожалуйста, помогите мне разобраться с этой проблемой. это мое изображение, теперь у меня есть 5 разных строк в таблице. если вы нажмете на первое текстовое поле после редактирования первого поля, тогда я хочу нажать кнопку, чтобы перейти ко второму полю и одновременно открыть текстовое представление и текстовое поле (как показано на рисунке). В поле Категория отображается средство выбора, в поле Имя (показано на изображении), Местоположение такое же, как на изображении, цена< /strong> есть лист действий.

Теперь я добавил код для списка действий Price Field. Может ли кто-нибудь помочь мне достичь необходимого. Спасибо за помощь... :)

введите здесь описание изображения

я делаю что-то подобное, но это еще не сработало для меня. код:

- (void) textFieldDoneTouched
{

    [self.site setValue:textField.text forIndex:selectedRow];

    [UIView animateWithDuration:0.3
                     animations:^{
                         CGRect f = textFieldContainerView.frame;
                         f.origin.y = self.view.frame.size.height;
                         textFieldContainerView.frame = f;
                     }];

    [textField resignFirstResponder];
    NSIndexPath *indexPath = [NSIndexPath indexPathForItem:selectedRow inSection:0];
    [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
    [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    self.tableView.userInteractionEnabled = YES;

    [self.view endEditing:TRUE];

    [self validateSiteData];
}

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

        [self textFieldDoneTouched];
    return YES;
}

#pragma mark -
#pragma mark UITextViewDelegate

- (void) textViewDoneTouched
{




    [self.site setValue:textView.text forIndex:selectedRow];

    [UIView animateWithDuration:0.3
                     animations:^{
                         CGRect f = textViewContainerView.frame;
                         f.origin.y = self.view.frame.size.height;
                         textViewContainerView.frame = f;
                     }];

    [textView resignFirstResponder];
    NSIndexPath *indexPath = [NSIndexPath indexPathForItem:selectedRow inSection:0];
    [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
    [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    self.tableView.userInteractionEnabled = YES;

    [self validateSiteData];
}


#pragma mark - UIActionSheetDelegate

- (void) actionSheet:(UIActionSheet *)actionSheet1 clickedButtonAtIndex:(NSInteger)buttonIndex
{

    if(buttonIndex == 0) {
        self.site.price = @"Free";
       // NSIndexPath *indexPath = [NSIndexPath indexPathForItem:4 inSection:0];

       // [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:100];
        //[textField resignFirstResponder];
       // [textView becomeFirstResponder];
        }
    else if(buttonIndex == 1) {
        self.site.price = @"Paid ($)";
       // NSIndexPath *indexPath = [NSIndexPath indexPathForItem:4 inSection:0];

      //  [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:100];
       // [textField resignFirstResponder];
         //[textView becomeFirstResponder];
        }


    NSIndexPath *indexPath = [NSIndexPath indexPathForItem:selectedRow inSection:0];
    [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
    [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

    [self validateSiteData];

}

person nikesh    schedule 29.01.2013    source источник


Ответы (1)


Итак, вы хотите, чтобы клавиша возврата на iPhone переходила к следующему полю, например, нажатие клавиши Tab на клавиатуре компьютера?

Одно небольшое замечание: я бы рекомендовал использовать серую клавишу «возврат» по умолчанию, а не синюю клавишу «Готово» на скриншоте. "Готово" означает, что пользователь завершил заполнение формы и клавиатура должна исчезнуть; «Возврат» предназначен для перехода к следующему полю или строке текста, как в приложении «Контакты» Apple.

Контакты Apple

Как и в приложении Apple Contacts, я также рекомендую, чтобы ваши UITextFields находились в тех же UITableViewCells, что и их метки (категория, имя...). Я нахожу текстовое поле прямо над клавиатурой на скриншоте немного запутанным. Если вы сделаете это, то следующая реализация textFieldShouldReturn сделает текстовое поле следующей ячейки первым ответчиком.

- (BOOL) textFieldShouldReturn:(UITextField*)textField {
    // Determine the row number of the active UITextField in which "return" was just pressed.
    id cellContainingFirstResponder = textField.superview.superview ;
    NSInteger rowOfCellContainingFirstResponder = [self.tableView indexPathForCell:cellContainingFirstResponder].row ;
    // Get a reference to the next cell.
    NSIndexPath* indexPathOfNextCell = [NSIndexPath indexPathForRow:rowOfCellContainingFirstResponder+1 inSection:0] ;
    TableViewCell* nextCell = (TableViewCell*)[self.tableView cellForRowAtIndexPath:indexPathOfNextCell] ;
    if ( nextCell )
        [nextCell.theTextField becomeFirstResponder] ;
    else
        [textField resignFirstResponder] ;
    return YES ;
}

Дайте мне знать, если вы хотите, чтобы я опубликовал весь проект.

UITextFields внутри UITableViewCells

person John Sauer    schedule 29.01.2013
comment
Большое спасибо за подробный ответ. Было бы очень полезно, если бы вы предоставили полный код. Спасибо... - person nikesh; 30.01.2013
comment
Привет, @John sauer. Я попытался использовать ваш код, изменив: TableViewCell* nextCell as - UITableViewCell* nextCell, но это не сработало (выдала ошибку) = [nextCell.theTextField beFirstResponder]; и поэтому я попытался изменить его как = [textField beFirstResponder]; но у меня все равно не работает... Пожалуйста, помогите здесь. - person nikesh; 30.01.2013
comment
Вот весь проект. Если вы достаточно знакомы с Xcode и Cocoa, вы сможете понять, как это работает, и реализовать что-то подобное в своем собственном проекте. - person John Sauer; 30.01.2013
comment
Спасибо, Джон, я постараюсь обойти проект и получить то, что мне нужно. - person nikesh; 30.01.2013
comment
Срок действия ссылки на проект Whole истек. - person David; 13.06.2017
comment
Дэвид, вот проект в Dropbox; вы найдете кнопку загрузки в углу. На данный момент проекту Xcode 4-1/2 года, поэтому я не знаю, насколько он полезен. - person John Sauer; 19.06.2017