1

助けてくれてありがとう。次のコードを使用して展開するカスタムセルがあります。ただし、最初のセル(インデックス0)は、ViewControllersの起動時に常に展開されますか?

私は何が欠けていますか?起動時にすべてを展開せず、選択時にのみ展開するにはどうすればよいですか。

どうもありがとう。

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        CustomCellCell *cell;
        static NSString *cellID=@"myCustomCell";
        cell = [tableView dequeueReusableCellWithIdentifier:cellID];

        if (cell == nil) 
        {
            NSArray *test = [[NSBundle mainBundle]loadNibNamed:@"myCustomCell" owner:nil options:nil];
            if([test count]>0)
            {
                for(id someObject in test)
                { 
                    if ([someObject isKindOfClass:[CustomCellCell class]]) {
                        cell=someObject;
                        break;
                    }
                }
            }
        }

        cell.LableCell.text = [testArray objectAtIndex:[indexPath row]];
        NSLog( @"data testarray table %@", [testArray objectAtIndex:[indexPath row]]);
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        return cell;
    }

    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
        self.selectedRow = indexPath.row;
        CustomCellCell *cell = (CustomCellCell *)[tableView cellForRowAtIndexPath:indexPath];

        [tableView beginUpdates];
        [tableView endUpdates];

        cell.buttonCell.hidden = NO;
        cell.textLabel.hidden = NO;
        cell.textfiledCell.hidden = NO;
        cell.autoresizingMask = UIViewAutoresizingFlexibleHeight;
        cell.clipsToBounds = YES;
        cell.accessoryType = UITableViewCellAccessoryNone;
    }

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
        if(selectedRow == indexPath.row) {
            return 175;
        }

        return 44;
    }
4

2 に答える 2

1

これは、のデフォルト値selectedRowがゼロであるためです。次のように初期化する必要があります。

selectedRow = NSIntegerMax; //or selectedRow = -1;

またはその他のデフォルト値。viewDidLoadこれはメソッドなどに追加できます。int型変数を宣言するときはいつでも、デフォルト値はゼロです。したがって、たとえば上記の場合にゼロをチェックする必要があるシナリオがある場合は、デフォルトでまったく使用されない値にする必要があります。負の値かNSIntegerMax、これに使用できます。

于 2012-12-07T20:22:55.170 に答える
0

selectedRowは整数のインスタンス変数だと思います。その整数は値0で始まります。最初のテーブルセルは行0であるため、意図的に設定していなくても、selectedRowと一致します。

これを解決する1つの方法は、selectedRowを整数ではなくNSIndexPathとして格納することです。

次に、これを行うことができます:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if([selectedRow isEqual:indexPath]) {
        return 175;
    }
    return 44;
}

また、selectedRowはデフォルトでnilに設定されるため、誤って一致することはありません。また、後でセクションを使用することにした場合は、より柔軟になります。

于 2012-12-07T20:25:13.877 に答える