UITextField в справке UITableViewCell

Я просмотрел интернет в поисках хорошего учебника или публикации о том, что UITextView заполнен UITextField в каждой ячейке для ввода данных.

Я хочу отслеживать каждый UITextField и текст, написанный внутри него во время прокрутки. Таблица будет разделена на разделы. Я использую пользовательский UITableViewCell, но я открыт для любого метода.

Кроме того, можно ли использовать textFields как ivars?

Если бы кто-то из вас мог указать мне в правильном направлении, было бы весьма полезно.

Заранее благодарю вас!

Ответ 1

Чтобы решить вашу проблему, вам необходимо поддерживать массив с некоторым количеством (количество текстовых полей, добавленных во все ячейки) объектов.

При создании этого массива вам нужно добавить пустые объекты NSString в этот массив. и каждый раз при загрузке ячейки вы должны заменить уважаемый объект на уважаемый текстовый фильтр.

Проверьте следующий код.

- (void)viewDidLoad{
    textFieldValuesArray = [[NSMutableArray alloc]init];
    for(int i=0; i<numberofRows*numberofSections; i++){
        [textFieldValuesArray addObject:@""];
    }

}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    return numberofSections;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return numberofRows;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];

     CustomTextField *tf = [[CustomTextField alloc] initWithFrame:CGRectMake(5,5,290,34)];
     tf.tag = 1;
     [cell.contentView addSubView:tf];
     [tf release];
    }
    CustomTextField *tf = (CustomTextField*)[cell viewWithTag:1];
    tf.index = numberofSections*indexPath.section+indexPath.row;
    tf.text = [textFieldValuesArray objectAtIndex:tf.index];

    return cell;
    }

- (void)textFieldDidEndEditing:(UITextField *)textField{

    int index = textField.index;
    [textFieldValuesArray replaceObjectAtIndex:index withObject:textField.text];
}

Привет,

Сатйа

Ответ 2

Прежде всего, вы должны понимать, что UITableViewCell и UITextField - это просто представления, они не должны хранить данные, они просто должны отображать их и позволять пользователю взаимодействовать с ними: данные должны храниться в контроллере вид таблицы.

Вы должны помнить, что UITableView позволяет повторно использовать экземпляры UITableViewCell для целей производительности: то, что отображается на экране, на самом деле является единственным подпунктом UITableView. Это означает, что вы будете повторно использовать одну ячейку, в которой уже есть текстовое поле, и напрямую установите текст в этом поле. Когда пользователь коснется поля, он отредактирует его, и вам нужно будет вернуть его обратно, когда пользователь закончит.

Самый быстрый способ - использовать то, что предлагает Сатья, это создание нормального UITableViewCell и вставка в UITextField (нет необходимости в классе CustomTextField...). Тег позволит вам вернуться в текстовое поле легко... Но вам нужно будет настроить свое текстовое поле, чтобы оно корректно работало при изменении размера таблицы или изменении метки в той же ячейке.

Самый чистый способ сделать это - подклассом UITableViewCell и настроить макет вашего ярлыка и текстового поля, и вы можете предоставить текстовое поле как свойство пользовательского подкласса.

Ответ 3

Я использовал текстовые поля в tableview для ввода данных. Я настроил класс UITextField в отдельном классе под названием Utility:

В Utility.h

 @interface CustomUITextField:UITextField{
        NSInteger rowNumber;
    }

В Utility.m

@implementation CustomUITextField

@synthesize rowNumber;
@end

Мой метод tableView cellForRowAtIndexPath -

- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *Identifier = @"Cell";
    UITableViewCell *cell = [theTableView dequeueReusableCellWithIdentifier:Identifier];
    if(cell == nil)
        cell = [self reuseTableViewCellWithIdentifier:Identifier withIndexPath:indexPath];

    CustomUITextField *itemNameTextField = (CustomUITextField *)[cell.contentView viewWithTag:TEXTFIELD_TAG];//this is the tag I have set in reuseTableViewCellWithIdentifier method for textfield
    itemNameTextField.rowNumber = indexPath.row;
    itemNameTextField.text = @"";//you can set it for the value you want
    if(itemListTable.editing)
        itemNameTextField.borderStyle = UITextBorderStyleRoundedRect;
    else
        itemNameTextField.borderStyle = UITextBorderStyleNone;



    return cell;

}

Вы можете настроить методы делегата UITextField для CustomUITextField и сохранить текст, введенный в определенное текстовое поле строки, путем обращения к номеру строки CustomTextField.

Просто попробуйте с этим.

Ответ 4

У меня была такая же проблема, вот какой код я нашел, который относится к этой проблеме. он помещает данные enterd в массив. Посмотрите на консоль отладчика, чтобы увидеть результаты текста, набранного здесь ссылкой TextFieldCell.. Счастливый код