Добавление UIPickerView в UITableViewCell

Я хочу добавить UIPickerView в UITableViewCell. Прямо сейчас у меня просто черное окно. Может ли кто-то также объяснить мне концепцию создания подклассов объектов пользовательского интерфейса для ячейки, т. Е. Когда мы делаем нашу ячейку делегатом и делегатом источника данных? Спасибо

РЕДАКТИРОВАТЬ: Вот код того, что я делаю сейчас

 case 1:  {
        cell = [tableView dequeueReusableCellWithIdentifier:@"groups"];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"groups"];
        }
            /*NSString *myGroupDetail = [_groupArray objectAtIndex:indexPath.row];
            NSLog(@"the group detail label is %@",myGroupDetail);
            cell.textLabel.text = myGroupDetail;
            */
        [cell addSubview:_groupPicker];

        break;

    }

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

2 ответа

Решение

Вы должны были бы выделить и инициализировать представление выбора в вашем методе cellForRow tableviewdelegate. я сделаю набросок для вас =) как инициализировать саму ячейку не должно быть трудно узнать, если вы немного погуглите;-)

...(tableView *)... cellForRowAtIndexPath... {

if(indexPath.row == pickerRow){
    UIPickerView *pickerView = [[UIPickerView alloc]init];
    cell = ... // alloc and initialize a cell
    cell addSubview:pickerView];
    }
else{ // your other cells }   

return cell;
}

ОБНОВЛЕНИЕ: в настоящее время у меня проблемы с git, поэтому я загрузил пример проекта на свой частный сервер: пример UITablePicker

github: https://github.com/sebamisc/UItableViewWithPicker

Вы можете изменить и использовать код, как вы хотите =)

Себастьян

Ну, я никогда так не делал.

Это должно быть в ячейке, или вы могли бы использовать для этого верхний или нижний колонтитул таблицы? (Я бы не предложил вид заголовка раздела / нижнего колонтитула.)

Предполагая, что это внутри UITableViewCell. Да, я бы подкласс UITableViewCell. Сделал это много. В этом случае объект вашей ячейки может быть делегатом источника данных средства выбора. Для этого вашему подклассу UITableViewCell (предположим, вы называете его MyTableViewCell) необходимо выполнить соответствующий протокол. Вы добавляете этот UIPickerView программно в метод init (initWithStyle) MyTableViewCell. Для макета внутри ячейки таблицы вы должны перезаписать метод layoutSubviews. Если ваше приложение можно повернуть в альбомную и книжную ориентации и / или если ваше приложение предназначено также для работы на iPad, то этот метод должен динамически учитывать границы таблицы. (Здесь часто используются границы экрана или две области, но это не сохраняется, когда таблица отображается в разделенном главном представлении или во всплывающем представлении на iPad.)

Строго говоря, MyTableViewCell не должен быть делегатом источника данных, просто потому, что он является элементом представления, а объекты представления не должны управлять какой-либо бизнес-логикой в ​​шаблоне проектирования MVC. Более разумной была бы реализация некоторого выделенного контроллера представления для вашей ячейки табличного представления, который выполняет протокол и назначается в качестве делегата. Тем не менее, оба будут работать. В случае, если это единственный вид выбора в вашей продаже, вы можете легко использовать свой подкласс UITableViewController, даже не помечая UIPickerView.

Альтернативой созданию подкласса UITableViewCell является создание UIPickerView в методе cellForRowAtIndexPath вашего tableViewController. Это хорошо для приложений с одиночной ориентацией. Однако вы можете настроить его так, чтобы он автоматически переупорядочивал свой UIPickerView.

В любом случае вы должны перезаписать метод heightForRowAtIndexPath UITableViewController, когда ваши представления таблицы больше не имеют такой же высоты. Если все они имеют одинаковую высоту, вы можете просто установить свойство rowHeight вашего UITableView.

Другие вопросы по тегам