навигация между текстовыми полями uitableview - PullRequest
0 голосов
/ 12 августа 2010

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

Предположим, у меня есть 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 не достигнет любой видимой строки. Какое может быть решение. мой стек переполнен. :)


Хорошо этот поток добивается цели, но я не знаю как. Может кто-нибудь объяснить мне, как?

1 Ответ

0 голосов
/ 22 августа 2011

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

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

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

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