1

UITableView を使用してデータを表示しています。各セル内に 1 つの UILabel を配置します。スクロール時にこれらの UILabel を非表示にしたい。これを試しましたが、何も起こりませんでした。

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    homeButton.userInteractionEnabled = NO;
    HomeCell *cell = [[HomeCell alloc] initWithStyle:UITableViewCellStyleDefault     reuseIdentifier:nil];
    cell.timeLeft.hidden = YES;
}

ありがとう。

4

3 に答える 3

3

これには a を使用しNSNotificationます。

メソッド内のHomeCellクラスでawakeFromNib...

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showLabel) name:@"ShowLabelsInCells" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideLabel) name:@"HideLabelsInCells" object:nil];

次に、メソッドshowLabelと を作成しますhideLabel

次に、UITableViewControllerスクロールビューのスクロール(およびスクロールの停止)を監視し、呼び出すことができます...

[[NSNotificationCenter defaultCenter] postNotificationName:@"ShowLabelsInCells" object:nil];

と...

[[NSNotificationCenter defaultCenter] postNotificationName:@"HideLabelsInCells" object:nil];

必要なときに。

セルを反復処理する必要はありません。

于 2013-08-05T06:48:07.993 に答える
1

これを試してみてください。をBOOL isScrollingプライベート変数として持ち、次のスクロールビュー デリゲートを実装します。これがあなたの望むものであることを願っています。

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{        
    if(!decelerate)
    {
        isScrolling = NO;

        NSArray *visibleRows = [self.aTableView indexPathsForVisibleRows];
        [self.aTableView reloadRowsAtIndexPaths:visibleRows withRowAnimation:UITableViewRowAnimationNone];
    }
    else
    {
        isScrolling = YES;        
    }
}

-(void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    isScrolling = NO;
    NSArray *visibleRows = [self.aTableView indexPathsForVisibleRows];
    [self.aTableView reloadRowsAtIndexPaths:visibleRows withRowAnimation:UITableViewRowAnimationNone];
}


-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    isScrolling = YES;
    NSArray *visibleRows = [self.aTableView indexPathsForVisibleRows];
    [self.aTableView reloadRowsAtIndexPaths:visibleRows withRowAnimation:UITableViewRowAnimationNone];

}

注:デフォルトでUITableViewCellに付属するtextLabelを使用しました.cellForRowAtIndexPathで:私はこれをやっています:

if(isScrolling)
    [cell.textLabel setHidden:YES];
else
    [cell.textLabel setHidden:NO];
于 2013-08-05T07:32:21.620 に答える