在 uitableviewcell 中自定义 uipickerview

Posted

技术标签:

【中文标题】在 uitableviewcell 中自定义 uipickerview【英文标题】:customize uipickerview inside uitableviewcell 【发布时间】:2016-06-21 04:21:09 【问题描述】:

我在 UITableViewCell 中有一个功能齐全的 UIPickerView,我想完成两件事。

UIPickerView 显示了 4 个组件,但第一个很少被提及。因此,我希望 A(首选)让它显示 0 的空白并滚动到 1,或者 B 修改颜色以使 0 不那么占主导地位。

其次,我想隐藏 UIPickerView 直到被选中。

我找到了这两个选项,但都位于 UIViewController 中,并且在 UITableViewCell 中不起作用。

import UIKit

class DiveDurationTableViewCell: UITableViewCell, UIPickerViewDelegate, UIPickerViewDataSource


    @IBOutlet var textfieldBizCat: UITextField!
    @IBOutlet var pickerBizCat: UIPickerView! = UIPickerView()


    // ---------------------------------------------------------------------------------------------
    // MARK: - Internal Constant

    let numberOfComponents: Int             = 4
    let FirstDigitComponentRows: Int        = 2
    let SecondDigitComponentRows: Int       = 10
    let ThirdDigitComponentRows: Int        = 10
    let DisplayMinuteComponentRows: Int     = 1

    let Minutes: String                     = "Min"
    let MinNumber                           = 0
    let MaxNumber                           = 9


    private var diveTime: Array<Int>        = [Int]()

    var FirstDigit: Int                     = 0
    var SecondDigit: Int                    = 0
    var ThirdDigit: Int                     = 0
    var DisplayMinutes: String              = "Min"


    // ---------------------------------------------------------------------------------------------
    // MARK: - IBOutlets

    @IBOutlet var diveTimePicker: UIPickerView!


    // ---------------------------------------------------------------------------------------------
    // MARK: - UITableVieCell Methods


    //
    //  Called when we are initialized from a storyboard or nib file.
    //
    override func awakeFromNib()
    
        super.awakeFromNib()


        //
        //  We create an array of integers from 0 to 9.
        //

        for i in self.MinNumber ..< self.MaxNumber+1
        
            self.diveTime.append(i)
        

        self.diveTimePicker.selectRow(0, inComponent: 0, animated: true)
        self.diveTimePicker.selectRow(0, inComponent: 1, animated: true)
        self.diveTimePicker.selectRow(0, inComponent: 2, animated: true)

    

    //
    //  The item has been selected in the table.
    //

    override func setSelected(selected: Bool, animated: Bool)
    
        super.setSelected(selected, animated: animated)
    



    // ---------------------------------------------------------------------------------------------
    // MARK: - UIPickerViewDataSource Methods


    //
    //  Number of components in the picker.
    //

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int
    
        return self.numberOfComponents
    

    //
    //  Number of rows in each component.
    //
    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
    
        if component == 0
        
            return self.FirstDigitComponentRows
         else if component == 1   
            return self.SecondDigitComponentRows
         else if component == 2   
            return self.ThirdDigitComponentRows
         else  
            return self.DisplayMinuteComponentRows
        
    

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
    

        if component == 0
        
            return String(self.diveTime[row])
        
        if component == 1
        
            return String(self.diveTime[row])
        
        if component == 2
        
            return String(self.diveTime[row])
        

        else
        
         return self.DisplayMinutes
            
        


    //
    //  The user has selected in item in the picker view.
    //
    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
    
    

更新: 我不是在问如何创建选择器视图,因为上面的代码效果很好。我只是问如何定制它以使其更具吸引力。

【问题讨论】:

UIPickerView in UITableView的可能重复 【参考方案1】:

UITableView 是 UIScrollview 的子类,而 UIPicker 也是滚动视图,你需要处理很多事情才能让它们一起工作。 首先是当您使用 Picker 在 UITableview 单元格上滚动时,哪个是第一个响应?如果 Picker 是第一个响应,并且 Picker 的大小太大(例如设备屏幕大),您将无法再滚动表格视图。如果 tableview 是第一个响应,则不能滚动 Picker,因为 table view 会滚动。 我建议您将 Picker View 添加为 tableview/controller.view 的子视图,在要添加 Picker 的单元格的位置/框架处,尝试在 tableview 单元格中像 Picker 一样伪造。

【讨论】:

您好贴纸,感谢您的回复。实际上,该应用程序已接近完成,只是尝试对其进行自定义以获得更好的外观。当前的选择器视图效果很好,只是没有那么吸引人。这就是为什么这个问题。谢谢

以上是关于在 uitableviewcell 中自定义 uipickerview的主要内容,如果未能解决你的问题,请参考以下文章

如何在 xamarin ios 中自定义 UITableViewCell 的背景颜色?

将 UIViewController 设置为 UITableViewCell 中自定义 UIView 的委托

UITableViewCell 中自定义 UIView 的 drawRect 行为错误

iOS8中自定义UITableViewCell动态高度的内容有不同的宽度

如何在 Material-UI 自动完成控件中自定义填充?

如何在 Material-ui 的 TableSortText 组件中自定义彩色文本和图标?