所以当我在
中创建自定义单元格时,我正在尝试存储单元格的索引路径- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
我在类中定义了一个名为“自定义单元格”的自定义单元格,并且我为该类添加了一个属性:
@property (nonatomic, strong) NSIndexPath *indexPath;
在cellForRowAtIndexPath
中的我使用customCell.indexPath = indexPath.
当我NSLog
它在下一行时它返回null。有人可以解释为什么会这样吗?
修改
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"EditableCell";
EditableCell *editableCell = (EditableCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (editableCell == nil) {
editableCell = [[EditableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
_myTextField = [editableCell textFieldCell];
if (indexPath.section == 0){
[_myTextField setPlaceholder:@"text"];
[_myTextField setReturnKeyType:UIReturnKeyNext];
}
else if (indexPath.section == 1){
[_myTextField setPlaceholder:@"text"];
[_myTextField setReturnKeyType:UIReturnKeyNext];
}
else {
[_myTextField setPlaceholder:@"text"];
[_myTextField setReturnKeyType:UIReturnKeyDone];
}
_myTextField.keyboardType = UIKeyboardTypeDefault;
_myTextField.delegate = self;
return editableCell;
}
我称之为[self.tableview indexpathforcell:cell]
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
if (textField.returnKeyType == UIReturnKeyNext) {
UITableViewCell* myCell = (UITableViewCell*)textField.superview;
EditableCell *currentCell = (EditableCell *)myCell;
NSLog(@"INDEXPATH OF CURRENT CELL: %@",[self.tableView indexPathForCell:currentCell]);
}
}
答案 0 :(得分:3)
您可以使用
确定给定单元格的indexPath
-[UITableView indexPathForCell:]
如果单元格需要知道它自己的indexPath
:
NSIndexPath * myIndexPath = [(UITableView *)self.superview indexPathForCell:self]
但如果确实如此,那就不对了!
查看您编辑的帖子我看到了问题。你需要:
UITableViewCell* myCell = (UITableViewCell*)textField.superview.superview
textField
实际上是单元格contentView
的子视图。这对我来说似乎总是有点不对,因此处理此问题的另一种方法是使自定义单元格为UITextFieldDelegate
,然后为您的单元格创建委托协议。所以在你所拥有的单元格内:
(BOOL)textFieldShouldReturn:(UITextField *)textField {
if (textField.returnKeyType == UIReturnKeyNext) {
[self.delegate customCell: self textFieldDidReturn: textField];
}
return NO;
}
然后在单元格委托中,您将获得对单元格和textField的引用