UIPickerView + TableViewCell + 委托和数据源

Posted

技术标签:

【中文标题】UIPickerView + TableViewCell + 委托和数据源【英文标题】:UIPickerView + TableViewCell + delegates and datasource 【发布时间】:2010-12-12 14:03:29 【问题描述】:

我有表格视图控制器和为我处理表格视图单元的单独类。在 tableview 单元格内我有pickerview。 如何为tableCell类中的pickerview实现委托和数据源,但我的委托功能在tableview控制器中?

【问题讨论】:

【参考方案1】:

对于斯威夫特:

    在自定义表格视图类中为 UIPickerView 创建 outlet:

    class MyTableViewCell: UITableViewCell, UIPickerViewDelegate, UIPickerViewDataSource 
        @IBOutlet var myPickerView: UIPickerView!
    
    

    在 ViewController 的“cellForRowAtIndexPath”中添加委托和数据源:

    class myViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITableViewDelegate, UITableViewDataSource 
        func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell             
            let cell = tableView.dequeueReusableCellWithIdentifier("myCell") as! MyTableViewCell
    
            cell.myPickerView.dataSource = self
            cell.myPickerView.delegate = self
    
            return cell
        
    
    

【讨论】:

即使您可以这样做,但感觉它并不是一个很好的关注点分离。我不同意这个问题的前提,即这是否是一个好的做法。或者,您可以将单元格设为委托,并通过接口生成器将委托分配给单元格,这将保持委托代码分配给单元格。【参考方案2】:

您可以让您的 tableView 控制器在创建 tableview 单元格时设置一个属性,表明它是委托和数据源。

在您创建的 tableviewcell 类上,只需添加一个属性,该属性是您的 tableview 控制器的实例。喜欢

@property (nonatomic, retain) MyTableViewController * pickerDelegate;

然后在您的 cellForRowAtIndexPath 中,您可以将该属性设置为 self

cell.pickerDelegate = self;

您可能还需要设置一些额外的属性,例如标签来区分每个单元格。我认为 tableviewcell 上的另一个属性,如 NSIndexPath 会做。

【讨论】:

以上是关于UIPickerView + TableViewCell + 委托和数据源的主要内容,如果未能解决你的问题,请参考以下文章

为啥 UIPickerView 是半透明的

如何从另一个 UIPickerview 更改 UIPickerView 的字符串?

UIPickerView 抖动

UIPickerView 选择和隐藏

如果 UIPickerView 未触及,则 UIPickerView 选择第 0 行

点击 uipickerview 时键盘不退出