如何从 cellForRowAtIndexPath 获取 textField 上的边框线?

Posted

技术标签:

【中文标题】如何从 cellForRowAtIndexPath 获取 textField 上的边框线?【英文标题】:How to get border line on textField from cellForRowAtIndexPath? 【发布时间】:2016-12-29 09:58:06 【问题描述】:

我有一个 UITableView,在 UITableViewCell 里面有 5 个文本字段。 我必须分配 UITextFieldDelegate 并想在 textField 上创建边框线。我正在从 cellForRowAtIndexPath 调用我的函数 createBorderLine,但它抛出了一个错误(致命错误:在展开可选值时意外发现 nil)。

下面是我的代码:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

        let identifier = "EditProductCell"

        var editProductCell = tableView.dequeueReusableCell(withIdentifier: identifier) as? EditProductCell
        if(editProductCell == nil)
        
            let nib:Array = Bundle.main.loadNibNamed("EditProductCell", owner: self, options: nil)!
            editProductCell = nib[0] as? EditProductCell

            //Call Create Border Line function.
            self.createBorderLine()
        
  

这是我的 createBorderLine 函数:

func createBorderLine()

    let index : NSIndexPath = NSIndexPath(row: 0, section: 0)
    let tCell : EditProductCell = self.tableView.cellForRow(at: index as IndexPath) as! EditProductCell

    tCell.InvoiceDate.delegate = self
    tCell.InvoiceNumber.delegate = self
    tCell.modelNumber.delegate = self
    tCell.productName.delegate = self
    tCell.serialNumber.delegate = self
    tCell.viewWarrentyDate.isHidden = true


    setBottomBorder(textField: tCell.InvoiceDate, width: 0.8,color : UIColor.lightGray)
    setBottomBorder(textField: tCell.InvoiceNumber, width: 0.8,color : UIColor.lightGray)
    setBottomBorder(textField: tCell.modelNumber, width: 0.8,color : UIColor.lightGray)
    setBottomBorder(textField: tCell.productName, width: 0.4,color : UIColor.lightGray)
    setBottomBorder(textField: tCell.serialNumber, width: 0.4,color : UIColor.lightGray)
  

我能做什么?为什么会报错?

【问题讨论】:

你为什么要创建let index : NSIndexPath = NSIndexPath(row: 0, section: 0)?您可以将单元格对象传递给 createBorderLine OK 其实我对 TableViewConcepts 有点困惑。我知道的基础知识。无论如何谢谢你。 【参考方案1】:

为什么每次都在 createBorderLine 中为第 0 行和第 0 节创建索引路径。只需在 createBorderLine 中传递单元格 ref

self.createBorderLine(editProductCell)

createBorderLine函数中

 func createBorderLine(tCell: EditProductCell)
 

tCell.InvoiceDate.delegate = self
tCell.InvoiceNumber.delegate = self
tCell.modelNumber.delegate = self
tCell.productName.delegate = self
tCell.serialNumber.delegate = self
tCell.viewWarrentyDate.isHidden = true


setBottomBorder(textField: tCell.InvoiceDate, width: 0.8,color : UIColor.lightGray)
setBottomBorder(textField: tCell.InvoiceNumber, width: 0.8,color : UIColor.lightGray)
setBottomBorder(textField: tCell.modelNumber, width: 0.8,color : UIColor.lightGray)
setBottomBorder(textField: tCell.productName, width: 0.4,color : UIColor.lightGray)
setBottomBorder(textField: tCell.serialNumber, width: 0.4,color : UIColor.lightGray)

  

您应该将createBorderLine 放在EditProductCell 类中,而不是在控制器类中创建createBorderLine。并通过 EditProductCell 对象引用直接调用。

【讨论】:

是的,我试过这个并且它的工作。还有其他方法吗? 我建议您将 createBorderLine 放在 EditProductCell 类中。因此您可以通过 cellForRowAt indexPath 方法中的 EditProductCell ref 直接访问 createBorderLine。 你是对的。我也是这么想的。但是当我点击一个文本字段并点击一个按钮时,我已经改变了边框线的颜色。谢谢 您可以通过在 cellForRowAt IndexPath 中编写 editProductCell.yourTextField.delegate = self 来简单地实现控制器类中的文本字段委托方法。 是的,好的。我也会试试那个。无论如何谢谢@Sahil

以上是关于如何从 cellForRowAtIndexPath 获取 textField 上的边框线?的主要内容,如果未能解决你的问题,请参考以下文章

uitableview 单元格 cellForRowAtindexPath 从 swift3 中的名称中提取第一个字母

如何交替调用 numberOfRowsInSection 和 cellForRowAtIndexPath

使用storyBoards时单元测试cellForRowAtIndexPath

从 cellForRowAtIndexPath 中调用 heightForRowAtIndexPath?

UITableView dataSource 必须从 tableView:cellForRowAtIndexPath 返回一个单元格

UITableView 数据源必须从 tableView 返回单元格:cellForRowAtIndexPath