我想将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;
}
组是我想要选择器视图的部分,我从数组中获取数据。
答案 0 :(得分:7)
你必须在tableviewdelegate的cellForRow方法中分配和初始化一个pickerview。生病的草图为你=)如果你谷歌一点,如何初始化一个单元本身不应该很难找到; - )
...(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 example
github:https://github.com/sebamisc/UItableViewWithPicker
yu可以根据需要修改和使用代码=)
塞巴斯蒂安
答案 1 :(得分:0)
好吧,我从来没有这样做过。
是否必须在单元格中,或者您是否可以使用表格的页眉或页脚视图? (我不建议使用节头/页脚视图。)
假设它在UITableViewCell内。 是的,我个人会将UITableViewCell子类化。做了那么多。在这种情况下,您的单元格对象可能是选择器的数据源委托。为此,您的UITableViewCell的子类(假设您将其命名为MyTableViewCell)需要满足相关协议。您可以在MyTableViewCell的init方法(initWithStyle)中以编程方式添加UIPickerView。对于表格单元格中的布局,您应该覆盖方法layoutSubviews。如果您的应用可以旋转到横向和纵向方向和/或如果您的应用程序也设计为在iPad上运行,那么此方法应该动态地考虑表的边界。 (屏幕或windwo边界通常用于hiere,但是当表格显示在拆分主视图或iPad上的弹出视图中时,不会保存。)
严格地说,MyTableViewCell不应该是数据源委托,因为它是一个视图元素,视图对象不应该管理MVC设计模式中的任何业务逻辑。更智能的是为您的表视图单元帽实现一些专用视图控制器实现协议并被指定为委托。但是,两者都有效。如果它是您销售中唯一的选择器视图,那么即使不标记UIPickerView,您也可以轻松使用UITableViewController子类。
继承UITableViewCell的另一种方法是在tableViewController的cellForRowAtIndexPath方法中创建UIPickerView。对于单向导向的应用程序来说这很好。但是,您可以通过自动重新排列UIPickerView的方式进行设置。
在任何情况下,当您的表视图不再具有相同的高度时,您应该覆盖UITableViewController的heightForRowAtIndexPath方法。如果所有这些高度仍然相同,那么您只需设置UITableView的rowHeight属性即可。