Nun*_*ira 8 uitableview ios swift
因此,我正在构建一个详细视图控制器应用程序,它提供一个包含两部分单元格的表格:标签和文本字段.
我正在尝试检索文本字段值并将其添加到数组中.我尝试使用" textField.superview.superview"技术,但它没有奏效.
func textFieldDidEndEditing(textField: UITextField!){
var cell: UITableViewCell = textField.superview.superview
var table: UITableView = cell.superview.superview
let textFieldIndexPath = table.indexPathForCell(cell)
}
Run Code Online (Sandbox Code Playgroud)
Xcode无法构建并呈现" UIView不可转换为UITableViewCell"和"转换UITableView".引用表有两个部分,分别为四行和两行.
提前致谢.
编辑:在函数的第二行添加".superview".
Cez*_*zar 23
虽然当前接受的答案可能有效,但它假设一个特定的视图层次结构,这不是一种可靠的方法,因为它很容易发生变化.
要到indexPath从UITextField一个细胞内,这是更好的去与以下内容:
func textFieldDidEndEditing(textField: UITextField!){
let pointInTable = textField.convertPoint(textField.bounds.origin, toView: self.tableView)
let textFieldIndexPath = self.tableView.indexPathForRowAtPoint(pointInTable)
}
Run Code Online (Sandbox Code Playgroud)
这将继续独立于视图层次结构的最终更改.
使用superview和类型转换不是首选的方法.最佳做法是使用委托模式.如果你在DemoTableViewCell中使用了一个textField,你在DemoTableViewController中使用了一个协议DemoTableViewCellDelegate并将DemoTableViewCell的委托分配给DemoTableViewController,以便在eiditing在textfield结束时通知viewcontroller.
protocol DemoTableViewCellDelegate: class {
func didEndEditing(onCell cell: DemoTableViewCell)
}
class DemoTableViewCell: UITableViewCell {
@IBOutlet var textField: UITextField!
weak var delegate: DemoTableViewCellDelegate?
override func awakeFromNib() {
super.awakeFromNib()
textField.delegate = self
}
}
extension DemoTableViewCell: UITextFieldDelegate {
func textFieldDidEndEditing(_ textField: UITextField) {
delegate.didEndEditing(onCell: self)
}
}
class DemoTableViewController: UITableViewController {
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: DemoTableViewCell.self, for: indexPath)
cell.delegate = self
return cell
}
}
extension DemoTableViewController: DemoTableViewCellDelegate {
func didEndEditing(onCell cell: DemoTableViewCell) {
//Indexpath for the cell in which editing have ended.
//Now do whatever you want to do with the text and indexpath.
let indexPath = tableView.indexPath(for: cell)
let text = cell.textField.text
}
}
Run Code Online (Sandbox Code Playgroud)
你需要在函数中强制转换第一行和第二行,如下所示:
func textFieldDidEndEditing(textField: UITextField!){
var cell: UITableViewCell = textField.superview.superview as UITableViewCell
var table: UITableView = cell.superview as UITableView
let textFieldIndexPath = table.indexPathForCell(cell)
}
Run Code Online (Sandbox Code Playgroud)
superview返回一个UIView,因此你需要将它转换为你期望的视图类型.
| 归档时间: |
|
| 查看次数: |
12427 次 |
| 最近记录: |