我现在所做的是在我的cellForRowAtIndexPath方法的变量中存储对textView的引用:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("photoCell") as EditProfileTableViewCell
cell.imageCaption.tag = indexPath.row
imageCaptionTextView = cell.imageCaption
imageCaptionTextView.delegate = self
return cell
}
然后,当我点击键盘上的完成按钮时,我尝试访问textView。
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
checkMaxLength(textView, maxLength: 60)
if text == "\n" {
imageCaptionTextView.resignFirstResponder()
return false
}
return true
}
我还有一些其他代码(不包含在这篇文章中),只是在textView周围添加一个边框,以便用户指示textView已被点击。这似乎只适用于第一个textView。我还在textView中添加了一个标签并打印到控制台,但标签返回相同的数字。
很明显我似乎只提到了第一个细胞。我无法使用didSelectRow等,因为此单元格包含一张照片,然后是一个textView,用于添加该图像的标题。
有没有简单的方法来引用我的细胞?我已经查看了堆栈流量上的示例,但它们没有包含足够广泛的示例作为答案。
在此感谢一些帮助。
感谢您的时间。
答案 0 :(得分:0)
假设您的UITextView
被添加为您的单元格contentView
的子视图,那么您可以通过执行此操作来访问封闭的UITableViewCell
:
UITableViewCell* cell = (id)textField.superview.superview;
或:
let cell = cell.superview.superview as UITableViewCell?
这依赖于contentView
是UITableViewCell
的子视图的假设,其在iOS 8中是真实的,但可能在将来停止。因此,您可以在那里添加一些检查(例如,使用isKindOfClass
),以确保您获得正确的对象类型。
答案 1 :(得分:0)
我认为您可以做的是先获取选定的单元格。 然后,您可以使用标签来访问它。
NSIndexPath *selectedCellIndex = [self.tableView indexPathForSelectedRow];
UITableViewCell *selectedCell = [self.tableView cellForRowAtIndexPath:selectedCellIndex];
然后,你得到你的目标细胞。因此,您可以使用标记来获取 UITextView 。
以下是谈论UIResponder链的链接:https://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/event_delivery_responder_chain/event_delivery_responder_chain.html
答案 2 :(得分:0)
UITextViewDelegate
具有textViewDidBeginEditing
和textViewDidEndEditing
的功能。
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("photoCell") as EditProfileTableViewCell
cell.imageCaption.tag = indexPath.row
cell.imageCaption.delegate = self
return cell
}
func textViewDidBeginEditing(_ textView: UITextView)
{
textView. // add border here
}
func textViewDidEndEditing(_ textView: UITextView)
{
textView.text // will give you final value
textView.tag will give you the row of the cell.
}
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
checkMaxLength(textView, maxLength: 60)
if text == "\n" {
textView.resignFirstResponder()
return false
}
return true
}