UITextField в справке UITableViewCell - PullRequest
       13

UITextField в справке UITableViewCell

11 голосов
/ 31 декабря 2010

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

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

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

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

Заранее спасибо!

Ответы [ 4 ]

10 голосов
/ 31 декабря 2010

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

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

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

- (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];
}

С уважением,

Satya

9 голосов
/ 03 января 2011

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

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

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

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

3 голосов
/ 04 января 2011

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

In Utility.h

 @interface CustomUITextField:UITextField{
        NSInteger rowNumber;
    }

In 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.

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

0 голосов
/ 02 февраля 2011

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

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