Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 管理UITableViewCell选定状态_Ios_Objective C_Uitableview - Fatal编程技术网

Ios 管理UITableViewCell选定状态

Ios 管理UITableViewCell选定状态,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我有一个带有静态表视图和两个部分的UITableViewController。第一部分有两个单元格,其中一个是布局表视图单元格>内容视图>文本字段 表格视图单元格的第二部分有一个布局,即表格视图单元格>内容视图>标签-当使用BeginUpdate和EndUpdate选择单元格时,单元格会展开,并通过tableView:heightForRowAtIndexPath:报告单元格高度 现在,当我触摸第一部分的一个单元格时,键盘会弹出,光标会放在文本字段中,但该单元格没有被选中——这意味着,如果我之前

我有一个带有静态表视图和两个部分的UITableViewController。第一部分有两个单元格,其中一个是布局表视图单元格>内容视图>文本字段

表格视图单元格的第二部分有一个布局,即表格视图单元格>内容视图>标签-当使用
BeginUpdate
EndUpdate
选择单元格时,单元格会展开,并通过
tableView:heightForRowAtIndexPath:
报告单元格高度

现在,当我触摸第一部分的一个单元格时,键盘会弹出,光标会放在文本字段中,但该单元格没有被选中——这意味着,如果我之前在第二部分中选择了一个单元格,它将保持选中状态(并因此展开)

此外,如果我在第一部分中选择了一个单元格,其中文本字段为first responder,那么我在第二部分中选择了一个单元格,该单元格将展开,但第一个单元格不会退出first responder并关闭键盘


我是否错误地布局了表视图,以致于单元格的选定状态无法自动管理?如果没有,管理UITableViewCells的选定状态的正确方法是什么?

我不知道您是如何编写代码的。但根据以上信息,我创建了一个示例应用程序。代码如下所示,它可以按照您的需要工作

我已经考虑了包含2个部分的表格。 第一部分在单元格上有文本字段。 第二部分在单元格上有UIlabel。 txtFieldCopy属于类的.h中声明的UITextField类型

请检查我将标记分配给视图的方式,因为我们需要它来获取索引XPath

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 2;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 2;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCellStyle style =UITableViewCellStyleSubtitle;
    static NSString *MyIdentifier = @"MyIdentifier";
    UITableViewCell  *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    int iTag=[indexPath row]+1;
    txtFieldCopy=nil;
    if(indexPath.section==1)
    {
        UILabel *lblFirst=nil;

        if (cell == nil)
        {
            cell = [[UITableViewCell alloc] initWithStyle:style reuseIdentifier:MyIdentifier];

                lblFirst = [[UILabel alloc] initWithFrame:CGRectMake(45, 0, 100,
                                                                     40)] ;

            lblFirst.tag=iTag;

            [cell.contentView addSubview:lblFirst];

            lblFirst=nil;
        }

        lblFirst = (UILabel *)[cell.contentView viewWithTag:iTag];

        cell.selectionStyle = UITableViewCellSelectionStyleBlue;

        lblFirst.text =@"Label 1";
    }
    else
    {
        UITextField *txtFirst=nil;

        if (cell == nil)
        {
            cell = [[UITableViewCell alloc] initWithStyle:style reuseIdentifier:MyIdentifier];

                txtFirst = [[UITextField alloc] initWithFrame:CGRectMake(40, 0, 50,
                                                                         40)] ;

            txtFirst.tag=iTag;
            txtFirst.delegate=(id)self;
            [cell.contentView addSubview:txtFirst];

            txtFirst=nil;
        }

        txtFirst = (UITextField *)[cell.contentView viewWithTag:iTag];

        cell.selectionStyle = UITableViewCellSelectionStyleBlue;

        txtFirst.text =@"text 1";
    }
    return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(txtFieldCopy)
    {
        [txtFieldCopy resignFirstResponder];
        txtFieldCopy=nil;
    }
}
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    NSLog(@"%d",textField.tag);
    NSIndexPath *iRowId =[NSIndexPath indexPathForRow:(textField.tag-1) inSection:0];
    [tblSample selectRowAtIndexPath:iRowId animated:NO scrollPosition:UITableViewScrollPositionMiddle];
    txtFieldCopy=textField;
}
如果您正在重新加载表视图,请确保
txtFieldCopy=nil,并将其设置为null。所以你可以忽略这一行。但在开始之前,请检查您是否在反复呼叫

让我知道它是否对你有用。我相信这对你肯定有用