1

注意してください、私は iOS 開発のコツを学んでいるところです。高さを切り替えて選択するとドロップダウンする「引き出し」の効果を与えるカスタムセルを使用するTableViewがあります。ほとんど完全に機能していますが、本当に奇妙な問題があります。12 より大きいインデックス行で選択されたセルは、高さを変更しません。ここにデモンストレーション用のビデオがあります。- http://d.chend.me/4NMU

カスタムセルをかなり標準的な方法で初期化していると思います。

static NSString *CellIdentifier = @"DrawerCell";

NSDictionary *clip = self.isFiltered ? [self.filteredClips objectAtIndex:indexPath.row] : [self.clips objectAtIndex:indexPath.row];

DrawerCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil] objectAtIndex:0];
}

私の heightForRowAtIndexPath デリゲート メソッドは次のようになります。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(self.selectedIndex == [NSNumber numberWithInt:indexPath.row])
    {
        return 126.0f;
    }
    else {
        return 60.0f;
    }
}

そして、didSelectRowAtIndexPath

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self.tableView deselectRowAtIndexPath:indexPath animated:NO];

    if(self.selectedIndex == [NSNumber numberWithInt:indexPath.row])
    {
        self.selectedIndex = nil;
        [tableView beginUpdates];
        [tableView endUpdates];
        NSLog(@"Selected Index: %@\nIndex Path Row: %i\n\n", self.selectedIndex, indexPath.row);
        return;
    }

    //First we check if a cell is already expanded.
    //If it is we want to minimize make sure it is reloaded to minimize it back
    if(self.selectedIndex != nil)
    {
        self.selectedIndex = [NSNumber numberWithInt:indexPath.row];
        [tableView beginUpdates];
        [tableView endUpdates];
        NSLog(@"Selected Index: %@\nIndex Path Row: %i\n\n", self.selectedIndex, indexPath.row);        
        return;
    }


    //Finally set the selected index to the new selection and reload it to expand
    self.selectedIndex = [NSNumber numberWithInt:indexPath.row];
    [tableView beginUpdates];
    [tableView endUpdates];
    NSLog(@"Selected Index: %@\nIndex Path Row: %i\n\n", self.selectedIndex, indexPath.row);    

}

12 を超えるインデックス行が機能しないのに、その前のすべてが完全に機能する露骨な理由はありますか? 補足として、それらはまだタッチ イベントを受信して​​おり、適切なインデックス パス行をログに記録していますが、ドロワーは表示されません。

4

1 に答える 1

1

あなたの問題は、 を介した NSNumbers の比較である可能性==があります。オブジェクトとして、これは値ではなくアドレスを比較します。-isEqual:代わりに使用してみてください。

于 2013-03-28T18:54:22.413 に答える