2013-07-09 2 views
0

У меня есть UITableView, содержащее «N» количество секций с «N» строк в каждом разделе.Шаблон UITableView в определенной строке в каждом разделе

Мое требование:

Когда страница табличное загружает 1-й строки в каждой секции должны быть проверить маркировку. Затем у пользователя будет возможность выбрать его выбор в каждом разделе, а строка в этом конкретном разделе будет отмечена.

Как реализовать эту функциональность?

+0

Как вы пробовали это делать? Какие данные используются для заполнения таблицы? – Wain

+0

В моем представлении таблицы будут разные параметры фильтра, а в каждом разделе критерии фильтров различны. – user2552714

+0

Может ли кто-нибудь помочь мне в этом – user2552714

ответ

1

Информация, отображаемая в любой строке таблицы, определяется источником данных таблицы. Убедитесь, что структура данных, которую вы используете для ваших данных, имеет некоторый способ указать, что данная строка имеет галочку. Затем просто примените -tableView:cellForRowAtIndexPath:, чтобы он определял, должна ли отображаться галочка для рассматриваемой ячейки и соответствующим образом регулирует ячейку.

Например, предположим, что данные представлены в виде массива разделов, и каждый раздел представляет собой набор словарей. Затем каждая строка имеет свой словарь. Если строка должна иметь галочку, ее словарь будет иметь запись checked, установленную на YES; если это не так, это запись NO. Вы можете отобразить галочку в качестве изображения. Тогда у вас есть:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    MyTableViewCell *cell = ... // code to get the cell 

    if (myData[indexPath.section][indexPath.row][@"checked"].boolValue == YES) { 
     cell.checkedImageView.image = self.checkmarkImage; 
    } 
    else { 
     cell.checkedImageView.image = nil; 
    } 

    return cell; 
} 

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

Вы можете изменить отмеченную ячейку, выполнив -tableView:didSelectRowAtIndexPath: так, чтобы она просматривала массив для данного раздела и снимает флажки с отмеченной строки, а затем проверяет выбранную строку.

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

1

Вы можете установить accessoryType вашей ячейки для галочки:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = ... // code to get the cell 

    // isCellSelectedAtIndexPath: is your custom method 
    // which encapsulates cell selection state logic 
    if ([self isCellSelectedAtIndexPath:indexPath]) 
    { 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    } 
    else 
    { 
     cell.accessoryType = UITableViewCellAccessoryNone; 
    } 

    return cell; 
} 
+0

Что на самом деле содержит пользовательский метод isCellSelectedAtIndexPath? – user2552714

+1

+1 Хорошая точка. @ user2552714, этот метод предположительно содержит код, определяющий, должна ли ячейка иметь галочку. Опять же, ваш источник данных должен будет принять решение на основе любых данных, которые он использует для заполнения таблицы. – Caleb

+0

Я не понял твое второе предложение. Вы можете это уточнить? – user2552714

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