2010-08-12 2 views
0

Я делаю приложение coredata, в котором мне было поручено сделать табличное представление (заполнение формы) текстовым полем в каждой строке, которую я успешно выполнил. Затем я создал панель инструментов с предыдущей и следующей кнопками и добавила в inputAccsoryView textField для навигации между текстовыми полями каждой ячейки. Одно текстовое поле в строке. Я также могу сделать магию с помощью предыдущих и следующих кнопок. Теперь проблема:Навигация по текстовым полям uitableview

Предположим, у меня есть 3 раздела. В первом разделе 4 строки. Во втором разделе 6 строк и в последней секции 1 строки. Теперь, когда я начинаю с 1-й строки и нажимает дальше до 11-й строки, она работает правильно, но затем я нажимаю далее, ничего не происходит, поскольку первая строка выгружена. Я получаю «нуль» для нее. Код, я использую:

настройки ячейки

if (cell == nil) { 
    NSLog(@"tag inside:%i",tag); 

    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 
            reuseIdentifier:identifier] autorelease]; 


    UITextField *theTextField = [[UITextField alloc] initWithFrame:CGRectMake(120, 10, 170, 25)]; 

    theTextField.textAlignment = UITextAlignmentRight; 

    theTextField.delegate = self; 

    theTextField.tag = tag; 
    theTextField.inputAccessoryView = [self configureTheToolBar]; 
    [theTextField setKeyboardAppearance:UIKeyboardAppearanceAlert]; 


    [cell.contentView addSubview:theTextField]; 
    [theTextField release]; 

} 

cell.textLabel.text = rowLabel; 
UITextField *textField = (UITextField *)[cell.contentView viewWithTag:tag]; 
textField.text = rowValue 

я обеспечиваю теги для текстового поля, как 601, 602 и т.д..

Затем получая currentTextField тег

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

    currentTextField = textField.tag; 
} 

затем следующий метод

if(currentTextField == 611){ 
     currentTextField = 601;  
    } else{ 
     currentTextField = currentTextField + 1; 
    } 
    NSLog(@"current text fiedld = %i",currentTextField); 

    NSLog(@"text ; %@",[self cellForTag:currentTextField].textLabel.text); 

     UITextField *firstResponderField = (UITextField *) [[self cellForTag:currentTextField].contentView viewWithTag:currentTextField]; 

     [firstResponderField becomeFirstResponder]; 

и метод cellForTag:

-(UITableViewCell *)cellForTag:(NSInteger)tag{ 




    UITableViewCell *cell; 
      switch (tag) { 
       case 601:{ 


        NSUInteger onlyRow[] = {0, 0}; 
        NSIndexPath *onlyRowPath = [NSIndexPath indexPathWithIndexes:onlyRow length:2]; 
        //[self.tableView scrollToRowAtIndexPath:onlyRowPath atScrollPosition:UITableViewScrollPositionTop animated:YES]; 

        cell = [self.tableView cellForRowAtIndexPath:onlyRowPath]; 

        break; 
} 
    return cell 

этот код работает частично, как раз от экрана клетки получают из памяти я не могу добраться до текстового поля в этой ячейке, а следующая кнопка перестает работать до значение currentTextfield достигает любого visiblerow. Каким может быть решение. мой стек переполнен. :)


Ok this нить делает трюк, но я не знаю, как. может ли кто-нибудь объяснить мне, как?

ответ

0

Как только ячейка покидает экран, она больше не будет доступна. Из-за этого вы можете захотеть, чтобы захватить значения текстовых полей, как только пользователь закончит редактирование их разводка события UIControlEventEditingDidEnd:

[myTextField 
    addTarget:self 
    action:@selector(myTextChanged:) 
    forControlEvents:UIControlEventEditingDidEnd]; 

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

Смежные вопросы