Arhn - архитектура программирования

uitextfield пользовательской ячейки таблицы

Я создаю таблицу с тремя различными типами пользовательских ячеек. Одна из них, одна пользовательская ячейка имеет UITextField. Я создаю две строки, используя эту пользовательскую ячейку. Я устанавливаю тег и делегат для текстовых полей обеих строк. Моя проблема в том, что когда я прокручиваю таблицу, эти строки с текстовыми полями перемещаются вверх и исчезают с экрана, а при прокрутке вниз мое приложение выходит из строя. Я получаю сообщение об ошибке

-[CellImageViewController txtField]: unrecognized selector sent to instance 0xa0ea5e0

Вот мой код для cellForRowAtIndexPath:

if (indexPath.row == 0 )
        {
            if (cell == nil) {
                cell = [[[CellWithTextFieldViewController alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID] autorelease];
            }

            cell.txtField.tag =1;

            cell.txtField.delegate = self;
            cell.txtField.text = @"kjfkd";
            }


            return cell;

        }
        else if(indexPath.row==1)
        {
            if (cell == nil) {
                cell = [[[CellWithTextFieldViewController alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID] autorelease];
            }

           cell.txtField.tag = 2;
           cell.txtField.text = @"glk";
           cell.txtField.delegate = self;

          return cell;
     }

У кого-нибудь есть идеи по этому вопросу?


Ответы:


1

у вас разные типы ячеек, поэтому вам нужно использовать для каждой ячейки свой идентификатор.

Попробуй это:

customOrNormalCell *cell [tableView dequeueReusableCellWithIdentifier:CellIdentifier]
if(!cell){
    cell = [[CellWithTextFieldViewController alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:[NSString stringWithFormat:@"%i", indexPath.row]];
}

С этим кодом каждый идентификатор ячейки будет 1,2,3,4... (все разные)

Я почти уверен, что это решит проблему

23.04.2013

2

создайте UITextField перед созданием UITableView и добавьте объект Textfield в представление содержимого ячейки

[cell.contentView addSubview:yourTxtFieldOblect];
29.01.2013
  • да .. Я сделал это, но все равно вылетает 29.01.2013
  • создайте один пользовательский метод и поместите код инициализации UITextField и вызов этого метода перед созданием UITableView (не добавляйте только код инициализации) и добавьте его в ячейку contentView... попробуйте.. может решить вашу проблему проблема :) 29.01.2013

  • 3

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

    29.01.2013

    4

    почему вы определяете ячейку для каждой строки?

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
     NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%d",indexPath.row];
     CellWithTextFieldViewController  *cell = (CellWithTextFieldViewController *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    
    
      if(cell == nil)
      {
        cell =[[[CellWithTextFieldViewController alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]autorelease];
    
        cell.txtField.tag = indexPath.row;
        cell.txtField.text = [SET TEXT FROM ARRAY];
        cell.txtField.delegate = self;
      }
    }
    
    29.01.2013

    5

    Я также столкнулся с этой проблемой в моем проекте.

    просто попробуйте это:

    Отключите свойство прокрутки в Tableview и создайте прокрутку. Затем добавьте свой Tableview в свой прокрутку.

    UITableView  *table=[[UITableView alloc]initWithFrame:CGRectMake(0, 0, 976, 395) style:UITableViewStylePlain];
    [table setSeparatorStyle:UITableViewCellSelectionStyleNone];
    UIScroll *scroll=[[UIScrollView alloc]initWithFrame:CGRectMake(24, 168, 978, 395)];
     [table setScrollEnabled:NO];
    
    [scroll addSubview:table];
    [self.view addSubview:scroll];
    [scroll sendSubviewToBack:table];
    
    29.01.2013

    6

    Попробуй это

         static NSString *cellIdentifier= @"Cell";
    
        CellWithTextFieldViewController *cell = (CellWithTextFieldViewController *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    
            if (cell == nil) {
                cell = [[CellWithTextFieldViewController alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
            }
    
            cell.txtField.tag =indexPath.row+1;
    
            cell.txtField.delegate = self;
            cell.txtField.text = @"kjfkd";
    
            return cell;
    
    29.01.2013

    7

    При прокрутке tableView ваша ячейка используется повторно. Вот почему textField исчезает. Попробуйте использовать разные идентификаторы ячеек для разных пользовательских ячеек. Не забудьте указать тот же идентификатор в файле пера для идентификатора ячейки

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

    {

    static NSString *customCellOne = @"customCell1";
    static NSString *customCellTwo = @"customCell2";
    UITableViewCell *cell =nil;
    
    
    
    if (0 == indexPath.row)
    {
        cell = (CustomCellOne *)[tableView dequeueReusableCellWithIdentifier:customCellOne];
    
        if (nil == cell)
        {
            // Create custom cell one and do what ever you want
    
        }
    }
    else if (1 == indexPath.row)
    {
        cell=(CustomCellTwo *)[tableView dequeueReusableCellWithIdentifier:customCellTwo];
    
        if (nil == cell)
        {
             // Create custom cell two and do what ever you want       
        }
    
    }
    
    return cell;
    

    }

    29.01.2013

    8

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

      textfield.deleagate = self;
    

    в CellWithTextFieldViewController.m

    28.04.2014
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..