当其中一个单元格被选中时,禁用其他表格视图单元格的文本字段

时间:2017-01-10 07:07:56

标签: ios objective-c uitableview tableviewcell

我在textField的自定义单元格上有一个tableView。选择其中一个cell后,我可以使用set selected方法为该特定textField停用cell

(void)setSelected:(BOOL)selected animated:(BOOL)animated { 
   [super setSelected:selected animated:animated]; 
if (selected) {
   self.accountNameTxtField.enabled = NO; 
} else { 
   self.accountNameTxtField.enabled = YES; 
   } 
}

当选择textField中的任何一个时,要求禁用其他单元格的cell。请指导我,谢谢。

4 个答案:

答案 0 :(得分:0)

您必须使用实例变量,您可以使用indexPath。

当用户选择任何单元格时,将该实例变量的值设置为选定的indexPath。

并重新加载表。

cellForRowAtIndexPath中检查当前indexPath是否被选为indexPath,如果是,则启用textField,否则禁用它。

答案 1 :(得分:0)

在tableview单元格上创建按钮并在tableview上启用或禁用textfield,或者可以在tableview上应用此逻辑didSelectRowAtIndexPath

-(void) btnClick:(id)sender
{
 UIButton *btn = (UIButton *)sender;
CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:tblView];
NSIndexPath *indexPath = [tblView indexPathForRowAtPoint:buttonPosition];
NSLog(@"table view row is ----%ld",indexPath.row);

 if (btn.isSelected == false) 
 {
    [btn setSelected:true];
   [selectRow addObject:[NSString stringWithFormat:@"%ld",indexPath.row]];
    self.accountNameTxtField.enabled = yes;
   //selectRow is NSMutableArray
 }
  else 
 {  [btn setSelected:false];
    [selectRow removeObject:[NSString stringWithFormat:@"%ld",indexPath.row]];
    self.accountNameTxtField.enabled = no;
 }
 }

   [tbleview relaoddata];
 if ([selectRow containsObject:[NSString  stringWithFormat:@"%ld",indexPath.row]])
 {  
 accountNameTxtField.enabled = yes; 
 }
else
{  
 accountNameTxtField.enabled = NO; 
}

答案 2 :(得分:0)

使用您的数据执行此操作,您必须拥有包含字典或类对象的数组的数据,我正在演示类对象。

假设你有一个Class对象DataClass创建一个BOOL属性说textFieldSelected,现在按照步骤

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"TableViewCell" forIndexPath:indexPath];

    DataClass *object=[self.dataArray objectAtIndex:indexPath.row];    
    [cell.textField setTag:indexPath.row];

    cell.textField.delegate=self;

    cell.textField.enabled=object.textFieldSelected;

    return cell;
}

现在选择一行

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    for(DataClass *object in self.dataArray){
        object.textFieldSelected=NO;
    } 
    DataClass *object=[self.dataArray objectAtIndex:indexPath.row];
    object.textFieldSelected=YES;
    [tableView reloadData];

}

最初,您可以设置textFieldSelected=YES;,以便启用所有textField。你可以希望玩对象,它将以这种方式工作。一切顺利。

答案 3 :(得分:0)

最后,我设法找到了整数细胞选择计数的解决方案。

单元格选择计数会在索引路径方法中选择行并在NsuserDefaults中设置该值。

selectedIndex++;

NSString *valueToSave = [NSString stringWithFormat:@"%ld",(long)selectedIndex];
[[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"SelectedIndexString"];
[[NSUserDefaults standardUserDefaults] synchronize];
在didDeselectRowAtIndexPath方法中,

细胞选择计数减少,并在NsuserDefaults中设置该值。

的selectedIndex - ;

在我的自定义表格视图中,textFieldDidBeginEditing方法中的单元格类从NsUserDefaults获取存储值并进行操作。

NSString * SelectedIndexString = [[NSUserDefaults standardUserDefaults]                             stringForKey:@ “SelectedIndexString”];

NSLog(@"%ld",(long)SelectedIndexString);
NSInteger SelectedIndexCount = [SelectedIndexString integerValue];

if (SelectedIndexCount) {
    self.accountNameTxtField.enabled = NO;
}
else{
    self.accountNameTxtField.enabled = YES;

}

非常感谢你们。谢谢你的时间。