如果知道行,是否可以派生indexPath?

时间:2016-08-24 11:22:33

标签: ios swift uitableview nsindexpath

好的,我会尝试尽可能简单地解决这个问题。我在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! } ,以便我可以引用单元格中包含的元素。任何人都可以提供任何见解吗?有没有人尝试过类似的方法?有没有办法只使用行来访问单元格?

4 个答案:

答案 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