Добавление UIPickerView в UITableViewCell - PullRequest
1 голос
/ 13 марта 2012

Я хочу добавить 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;

    }

Группы это раздел, в котором я хочу, чтобы представление выбора, я получаю эти данные из массива,Here is what i want to implement

Ответы [ 2 ]

7 голосов
/ 13 марта 2012

Вы должны будете выделить и инициализировать представление выбора в вашем методе 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

Вы можете изменять и использовать код по своему усмотрению =)

Себастьян

0 голосов
/ 13 марта 2012

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

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

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

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

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

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

...