Iphone 将UIPickerView添加到UITableViewCell

Iphone 将UIPickerView添加到UITableViewCell,iphone,xcode,uitableview,storyboard,uipickerview,Iphone,Xcode,Uitableview,Storyboard,Uipickerview,我想将UIPickerView添加到UITableViewCell。现在我只得到一扇黑色的窗户。有人能给我解释一下将UI对象子类化到单元格的概念吗?例如:我们什么时候将单元格作为委托和数据源委托?谢谢 编辑:这是我现在正在做的代码 case 1: { cell = [tableView dequeueReusableCellWithIdentifier:@"groups"]; if (cell == nil) { cell = [[UI

我想将UIPickerView添加到UITableViewCell。现在我只得到一扇黑色的窗户。有人能给我解释一下将UI对象子类化到单元格的概念吗?例如:我们什么时候将单元格作为委托和数据源委托?谢谢

编辑:这是我现在正在做的代码

 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;

    }
组是我想要选取器视图的部分,我从数组中获取数据。

您必须在tableviewdelegate的cellForRow方法中分配并初始化pickerview。我会给你画草图=)如果你用谷歌搜索一下,如何初始化单元格本身应该不难找到;-)

更新:我目前在git方面遇到问题,因此我将一个示例项目上载到我的私人服务器:

github:

yu可以根据需要修改和使用代码=)


sebastian

您必须在tableviewdelegate的cellForRow方法中分配并初始化pickerview。我会给你画草图=)如果你用谷歌搜索一下,如何初始化单元格本身应该不难找到;-)

更新:我目前在git方面遇到问题,因此我将一个示例项目上载到我的私人服务器:

github:

yu可以根据需要修改和使用代码=)


塞巴斯蒂安

嗯,我从来没有这样做过

它是否必须位于单元格中,或者是否可以使用表的页眉或页脚视图进行此操作?(我不建议使用节页眉/页脚视图。)

假设它位于UITableViewCell内。 是的,我个人会将UITableViewCell子类化。我经常这么做。在这种情况下,单元格对象可以是选择器的数据源委托。为此,UITableViewCell的子类(假设您将其命名为MyTableViewCell)需要满足相关协议。可以在MyTableViewCell的init方法(initWithStyle)中以编程方式添加该UIPickerView。对于表格单元格内的布局,应覆盖方法layoutSubviews。如果你的应用程序可以旋转到风景和肖像方向,或者如果你的应用程序也被设计成在iPad上运行,那么这个方法应该动态地考虑表的边界。(屏幕或windwo边界通常用于hiere,但在iPad上的拆分主视图或弹出视图中显示表格时,不会保存。)

严格来说,MyTableViewCell不应该是数据源委托,因为它是一个视图元素,视图对象不应该管理MVC设计模式中的任何业务逻辑。更智能的方法是为您的表视图单元格实现一些专用的视图控制器,它满足协议并被指定为代理。然而,这两种方法都能奏效。如果它是sell中唯一的picker视图,那么即使不标记UIPickerView,也可以轻松地使用UITableViewController子类

子类化UITableViewCell的另一种方法是在tableViewController的CellForRowatineXpath方法中创建UIPickerView。这对于单方向应用程序来说很好。但是,您可以将其设置为自动在UIPickerView中重新排列其位置


在任何情况下,当您的表视图不再具有相同的高度时,都应该覆盖UITableViewController的heightForRowAtIndexPath方法。如果它们仍然具有相同的高度,则可以简单地设置UITableView的rowHeight属性

嗯,我从来没有这样做过

它是否必须位于单元格中,或者是否可以使用表的页眉或页脚视图进行此操作?(我不建议使用节页眉/页脚视图。)

假设它位于UITableViewCell内。 是的,我个人会将UITableViewCell子类化。我经常这么做。在这种情况下,单元格对象可以是选择器的数据源委托。为此,UITableViewCell的子类(假设您将其命名为MyTableViewCell)需要满足相关协议。可以在MyTableViewCell的init方法(initWithStyle)中以编程方式添加该UIPickerView。对于表格单元格内的布局,应覆盖方法layoutSubviews。如果你的应用程序可以旋转到风景和肖像方向,或者如果你的应用程序也被设计成在iPad上运行,那么这个方法应该动态地考虑表的边界。(屏幕或windwo边界通常用于hiere,但在iPad上的拆分主视图或弹出视图中显示表格时,不会保存。)

严格来说,MyTableViewCell不应该是数据源委托,因为它是一个视图元素,视图对象不应该管理MVC设计模式中的任何业务逻辑。更智能的方法是为您的表视图单元格实现一些专用的视图控制器,它满足协议并被指定为代理。然而,这两种方法都能奏效。如果它是sell中唯一的picker视图,那么即使不标记UIPickerView,也可以轻松地使用UITableViewController子类

子类化UITableViewCell的另一种方法是在tableViewController的CellForRowatineXpath方法中创建UIPickerView。这对于单方向应用程序来说很好。但是,您可以将其设置为自动在UIPickerView中重新排列其位置


在任何情况下,当您的表视图不再具有相同的高度时,都应该覆盖UITableViewController的heightForRowAtIndexPath方法。如果它们仍然具有相同的高度,则可以简单地设置UITableView的rowHeight属性

我已经更新了我的问题。。你建议我做什么?谢谢你的回复。塞巴斯蒂安链接的例子对我来说很好。它是为只有一个单元格的表而设计的。试想一下你的表有点复杂。这意味着示例中cellForRowAtIndexPath的内容进入“案例1”块。你的身高是多少
...(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;
}