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.. Счастливый код