Как получить данные из пользовательской ячейки таблицы - PullRequest
0 голосов
/ 26 апреля 2011

Я новичок в разработке приложений для Iphone.Я столкнулся с проблемой.У меня есть представление таблицы в том, что я вставил текстовое поле в каждой строке.Я сделал часть интерфейса.Но как я могу получить значения из текстового поля в табличном представлении.Я создал класс customCell.Я не смог использовать IBOutlet и все.

вот мой код:

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

    static NSString *CellIdentifier = @"Cell";

    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    }

    // Configure the cell...

    return cell;
}

Ответы [ 2 ]

0 голосов
/ 27 апреля 2011

Как уже объяснил Шреурс, вам необходимо реализовать протокол UITextFieldDelegate для вашего viewController (вместе с UITableViewDataSource), изучите их в документации, чтобы узнать больше о том, что вы можете с ними сделать. Но это сложнее, чем иметь различные UITextFields в вашем представлении.

Вы должны учитывать тот факт, что, когда ячейка покидает видимый диапазон таблицы, она будет освобождена или повторно использована. Так, если, например, ячейка 1 содержит текстовое поле, в котором вы что-то пишете, а затем прокрутите до ячейки 15, вы, вероятно, получите ячейку с текстовым полем ячейки 1 и ее содержимым. Если вы подготавливаете свои ячейки для повторного использования, очищая textFields, вы должны хранить эти данные где-то, чтобы повторно ввести их в соответствующую ячейку. После всего этого вы поцарапаете голову тому, что textField вызывает вашего делегата (возможно, ваш viewController, поэтому вам придется пометить их номером, из которого вы можете извлечь номер строки - т.е. cell.textField.tag = indexPath .row + 100).

Итак, чтобы подвести итог, вы хотите что-то подобное в вашем viewController

- (void)textFieldDidEndEditing:(UITextField *)textField {
    if ([textField.text length] > 0) {
        NSUInteger row = textField.tag - 1;
        [textFieldValues setObject:textField.text forKey:[NSNumber numberWithInt:row]];
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *cellId = @"cellId";
    TextFieldTableViewCell *cell = (TextFieldTableViewCell *) [tableView dequeueReusableCellWithIdentifier:cellId];
    if (!cell)
        cell = [[[TextFieldTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId] autorelease];

    cell.textField.tag = indexPath.row + 1;
    cell.textField.delegate = self;
    NSString *value = [textFieldValues objectForKey:[NSNumber numberWithInt:indexPath.row]];
    if (value)
        cell.textField.text = value;
    else
        cell.textField.text = @"";

    return cell;
}

, а затем в вашем TextFieldTableViewCell.h

@property (nonatomic, readonly) UITextField *textField;

и, наконец, в вашем TextFieldTableViewCell.m

@synthesize textField;

p.s. Я бродил, что может произойти, когда редактирование textField покидает видимый диапазон ячеек, и он не используется повторно или выпущен ... дал мне озноб! Так что EndEditing должно быть адекватным.

0 голосов
/ 26 апреля 2011

У вас должен быть источник данных (обычно NSMutableArray), который (обычно) содержит значения для каждой ячейки. Вы должны быть в состоянии получить нужное вам значение, используя indexPath, например,

NSObject *object = [dataArray objectAtIndex:indexPath.row];

В приведенном выше коде я предполагаю, что источником данных для tableView является массив с именем dataArray . Я также предполагаю, что он содержит объекты типа NSObject (это обычно не так в реальных примерах, в таких ситуациях это, как правило, подкласс, такой как NSDictionary или пользовательский подкласс NSObject.

Убедитесь, что tableView подключен к своему источнику данных. Соединение выполняется (как минимум) методами setDataSource: на вашем экземпляре UITableView и numberOfSectionsInTableView: и numberOfRowsInSection: делегировать методы.

Ваш подкласс UITableViewCell , как правило, не должен использоваться для сохранения данных, если вы используете его таким образом, вы используете неправильный подход. Следующий сайт должен быть хорошим введением в использование класса UITableView: http://www.mobisoftinfotech.com/blog/iphone/introduction-to-table-view/

...