【问题标题】:Adding UIPickerView to a UITableViewCell将 UIPickerView 添加到 UITableViewCell
【发布时间】:2012-03-30 04:57:54
【问题描述】:

我想将 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;

    }

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

【问题讨论】:

    标签: iphone xcode uitableview storyboard uipickerview


    【解决方案1】:

    您必须在 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

    你可以随意修改和使用代码 =)

    塞巴斯蒂安

    【讨论】:

    • 我已经更新了我的代码,我正在使用相同的东西.. 我的委托和数据源使用情节提要连接到视图控制器。还是黑屏。。。谢谢回复
    • 我已经更新了问题,我应该也发布我的委托方法吗?
    • 我创建了一个小示例项目并将其附加到我的答案中 =) 玩得开心。
    • 查看我在答案中链接到的示例项目 =) 这应该可以回答您的所有问题。不要忘记pickerviewdelegate等=)玩一下(当然你可以使用代码)
    • 我将 viewcontroller 本身设置为 pickerview 的代表。这些完全是底部的方法,我从数组中返回变量。我实际上从这里复制了 pickerviewdelegate 方法的代码:iphonesdkarticles.com/2009/01/…(有点懒惰)。但是您可以看到非常简单的如何初始化它。您必须注意 - 如果您的 tableview 使用我的代码获得超过 1 行,所有这些都将持有一个选择器,因此您必须在 cellforrowatindexpath 方法 =) (indexPath.row)
    【解决方案2】:

    嗯,我从来没有这样做过。

    它是否必须在单元格中,或者您可以使用表格的页眉或页脚视图吗? (我不建议使用部分页眉/页脚视图。)

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

    严格来说,您的 MyTableViewCell 不应该是数据源委托,因为它是一个视图元素,并且视图对象不应该管理 MVC 设计模式中的任何业务逻辑。更聪明的是为您的表格视图单元帽实现一些专用的视图控制器,以满足协议并被分配为委托。但是,两者都会起作用。如果它是您销售中唯一的选择器视图,那么即使不标记 UIPickerView,您也可以轻松使用您的 UITableViewController 子类。

    继承 UITableViewCell 的另一种方法是在 tableViewController 的 cellForRowAtIndexPath 方法中创建 UIPickerView。这对于单向应用程序来说很好。但是,您可以设置它自动重新排列 UIPickerView。

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

    【讨论】:

    • 我已经更新了我的问题.. 你建议我做什么?感谢您的回复。
    • Sebastian 链接的示例对我来说看起来不错。它专为只有一个单元格的表格而设计。只需考虑您的表有点复杂。这意味着示例中 cellForRowAtIndexPath 的内容进入您的“案例 1”块。在所有其他情况下,您的 heightForRowAtIndexPath 应该只为第 1 节和 30.0f (或任何合适的)返回 180.0f 。当表格视图中只有一个选择器时,孔的东西应该可以正常工作。如果稍后添加第二个选择器,则需要修改解决方案。
    • 是的,很好,给出的例子。一切都很好。现在我遇到的问题是如何减小选择器的大小,即:选择器的高度。我用谷歌搜索,发现苹果已经修复了它,没有直接的方法可以改变它。
    • 是的。不幸的是,这是选择器视图的缺点之一。任何缩小它的尝试只会导致它的一部分被切割——如果有任何明显的变化的话。
    猜你喜欢
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    相关资源
    最近更新 更多