我在桌面视图上有自定义单元格。所有自定义单元格上都有一个文本字段。文本字段以禁用方式启动。我已经对它们进行了配置,以便在长按后,文本字段变为启用状态,用户可以编辑文本字段。
但是,我希望文本字段一次只能启用一个,这样用户就无法切换到其他单元格上的文本字段。所以我想只启用
这是我的代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
simpleTableIdentifier = @"SimpleTableCell";
cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SimpleTableCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
[cell.textField setEnabled:NO];
//put in long press
UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
[cell addGestureRecognizer:longPressGesture];
}
}
}
然后我们有了这个:
- (void)longPress:(UILongPressGestureRecognizer *)gesture
{
if (gesture.state == UIGestureRecognizerStateBegan)
{
// get affected cell
cell = (SimpleTableCell *)[gesture view];
// get indexPath of cell
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
[self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:0];
// enabling text field
[cell.textField setEnabled:YES];
[cell.textField becomeFirstResponder];
}
}
如您所见,表视图上启用了所有文本字段。如何仅激活所选单元格的表格视图?
感谢。
答案 0 :(得分:3)
你可以做的是首先隐藏cellForRowAtIndexPath中的所有文本字段然后当长按longPress:方法时取消隐藏该特定单元格的文本字段然后比较索引路径,如果它与长按一样然后取消隐藏
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
---------
if(indexPath.row == selectedIndexPathRow) {
cell.textField.hidden = NO;
[cell.textField becomeFirstResponder];
}
else {
cell.textField.hidden = YES;
---------
}
- (void)longPress:(UILongPressGestureRecognizer *)gesture
{
if (gesture.state == UIGestureRecognizerStateBegan)
{
// get affected cell
cell = (SimpleTableCell *)[gesture view];
// get indexPath of cell
selectedIndexPath = [self.tableView indexPathForCell:cell];
selectedIndexPathRow = selectedIndexPath.row;
[self.tableView reloadData];
}
}
答案 1 :(得分:0)
不要在长按处理程序方法中启用文本字段,只需使用该方法选择单元格,然后调用reloadData。在你的cellForRowAtIndexPath中,有一个if-else子句,如果索引路径等于所选行的索引路径,则启用文本字段,如果不是,则禁用它。
答案 2 :(得分:0)
按如下方式更新您的NSIndexPath
内容:
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:[gesture locationInView:cell]];
答案 3 :(得分:0)
所以我提出了一个简单的解决方案。我做了它,以便检查文本字段是否已经激活,如果不是,则启用其余的手势方法。如果启用了文本字段,则无法在任何其他单元格上触发该手势。很好地工作如下:
- (void)longPress:(UILongPressGestureRecognizer *)gesture
{
if (![cell.textField isEnabled]) {
// only when gesture was recognized, not when ended
if (gesture.state == UIGestureRecognizerStateBegan)
{
// get affected cell
cell = (SimpleTableCell *)[gesture view];
// get indexPath of cell
//NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:[gesture locationInView:cell]];
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
[self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:0];
[cell.textField setEnabled:YES];
[cell.textField becomeFirstResponder];
}
}
}