我正在使用2 tableviews
textfiled
中都有tableviewcell
,
我在textFieldDidEndEditing
获取文本字段的文本,但我怎么知道正在编辑的文本属于哪个tableview,我只想知道我可以区分来自textfield的文本存储在两个不同数组中的条件
func textFieldDidEndEditing(_ textField: UITextField)
{
// let indexOf = txtArray.index(of:textField.tag)
if self.tblAnswer.isEditing
{
let indexOf = textField.tag
if let text = textField.text
{
if allAnsText.indices.contains(indexOf)
{
allAnsText.remove(at: indexOf)
}
if text.isEmpty
{
print("Write some text there")
}
else
{
allAnsText.insert(text, at: indexOf)
print(allAnsText)
}
}
}
else if self.tblVideo.isEditing
{
let indexOf = textField.tag
if let text = textField.text
{
if allMediaText.indices.contains(indexOf)
{
allMediaText.remove(at: indexOf)
}
if text.isEmpty
{
print("Write some text there")
}
else
{
allMediaText.insert(text, at: indexOf)
print(allMediaText)
}
}
}
}
答案 0 :(得分:0)
Swift 3.x
假设您的textFiled层次结构为:
TextField->细胞> TableView中
在textFieldDidEndEditing
print(textField.superview?.superview)
if textField.superview?.superview == myTable1 {
}
else if textField.superview?.superview == myTable2 {
}
else {
}
答案 1 :(得分:0)
忘记遍历视图层次结构;它容易出错,未来确切的细节可能会发生变化(并严重破坏你的应用程序)。
相反,试试这个:
获取文本字段在屏幕上的位置:
// Center on text field's own coordinate system
let position = textField.frame.center
// Center on Window's coordinate system
let positionOnWindow = textField.convert(position, to: nil)
将该点转换为表格视图的坐标系,看它是否对应一行:
let positionInTable = tableView1.convert(positionOnWindow, from: nil)</strike>
if let indexPath = tableView1.indexPathForRow(at: positionInTable) {
// Text field is inside a row of table view 1
} else {
// Otherwise
}
注意:以上代码未经测试。可能包含编译器错误。
假设两个代码片段在同一个类(您的表视图委托,数据源和文本字段委托)上运行,那么传递positionOnWindow
的值应该没有问题(它可以全部发生在文本字段委托中)法)。
正如@rmaddy在评论中正确指出的那样,上面的代码太迂回;你可以直接获得这个职位:
let positionInTable = tableView1.convert(textField.frame.center, from: textField)
(无需前往窗口的坐标系并返回)