如何从 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 返回一个单元格