好的,我会尝试尽可能简单地解决这个问题。我在ViewController中有一个tableView。我有两个原型单元用于表。我重复使用单元格来填充表格。
在其中一个单元格中,我已经为label
添加了手势识别器,通过该手势识别器,我可以在标签的位置显示textField
并隐藏{{1} }}。现在,当我使用label
并点击返回键时,我希望标签文字更改为我在textField
中输入的内容。所以我在textField
中实现了UITextFieldDelegate
协议。我还为单元格中的每个textField添加了标签,以便我知道viewController
返回的内容以及textField所在的行。
基本上,我想知道的是,如果我已经知道indexPath.row,是否有任何方法可以获取indexPath?
对于手势识别器,我能够通过从tapped位置获取indexPath来解决此问题:
textField
我需要func genderTapped(sender: UITapGestureRecognizer) {
let tapLocation = sender.locationInView(self.profileInfoTable)
let indexPath = self.profileInfoTable.indexPathForRowAtPoint(tapLocation)
let cell = self.profileInfoTable.cellForRowAtIndexPath(indexPath!) as! editUserDataCell
cell.savedUserInput.hidden = true
cell.userDetailTextfield.becomeFirstResponder()
cell.userDetailTextfield.hidden = false
cell.userDetailTextfield.text = cell.savedUserInput.text!
}
,以便我可以引用单元格中包含的元素。任何人都可以提供任何见解吗?有没有人尝试过类似的方法?有没有办法只使用行来访问单元格?
答案 0 :(得分:2)
如果能够在CBPeripheral
中获取indexPath,那么您可以创建一个类型GestureMethod
的实例属性,将其值存储在Gesture的方法中,然后在NSIndexPath
内使用indexPath委托方法,类似这样。
textFieldShouldReturn
现在在var selectedIndexPath: NSIndexPath?
func genderTapped(sender: UITapGestureRecognizer) {
let tapLocation = sender.locationInView(self.profileInfoTable)
self.selectedIndexPath = self.profileInfoTable.indexPathForRowAtPoint(tapLocation)
let cell = self.profileInfoTable.cellForRowAtIndexPath(self.selectedIndexPath!) as! editUserDataCell
cell.savedUserInput.hidden = true
cell.userDetailTextfield.becomeFirstResponder()
cell.userDetailTextfield.hidden = false
cell.userDetailTextfield.text = cell.savedUserInput.text!
}
方法中使用此self.selectedIndexPath
。
修改:根据您的问题评论,您已告知您只有一个UITextFieldDelegate
,因此您也可以从Section
indexPath
创建textField
1}}这样。
tag
答案 1 :(得分:2)
如果是单个或多个部分,则以下代码将起作用
在cellForRowAtIndexPath
中,将标记设置如下: -
let tag = indexPath.section*100 + indexPath.row
cell.savedUserInput.tag = tag
cell.userDetailTextfield.tag = tag
在textfield委托方法中,获取indexPath,如下所示: -
func genderTapped(sender: UITapGestureRecognizer) {
let textfieldObject = sender as! UITextField
let sectionTag = textfieldObject.tag % 100
let rowTag = textfieldObject.tag / 100
let indexPath = NSIndexPath(forRow: rowTag.tag, inSection: sectionTag)
}
答案 2 :(得分:1)
免责声明:这不是这里提出的字面问题的答案,但它可能会为OP的目标提供更简单的解决方案。
除非您在问题中描述的内容之外还需要做一些事情,否则在我看来,一个更简单的解决方案就是根本不使用标签,而只是使用UITextField
并设置它{ {1}}当您希望它像标签一样运行时,属性为false。
如果您需要在模式更改时更改样式,则可以对enabled
进行子类化。
答案 3 :(得分:0)
如果您知道要访问的行号以及该行所在的部分,请使用此代码
let indexPath = NSIndexPath(forRow: row, inSection: section)
要访问与此indexPath对应的单元格,请使用
let cell = tableView.cellForRowAtIndexPath(indexPath) as! tableViewCell