0

私はこのようなことを達成したい:

テーブル ビュー セル

データは 1 つしかありませんが、背景色は最後まで続きます。

のテーブルビューデリゲート内でできることを理解していますtableView:willDisplayCell:forRowAtIndexPath:。しかし、空のセルには移動しないため、空のセルは常に白になります。

4

6 に答える 6

4

セルが初期化されていない場合でも、次のコードを使用してセルの代替色を表示しました。以下に示すように、scrollViewDidScrollでこの作業を行いました:--

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    UIView *view=[[UIView alloc] initWithFrame:tblView.frame];
    view.backgroundColor=[UIColor greenColor];

    UIView *cellView;

    int y=0;
    int i=0;

    for (UIView *view in tblView.subviews) {
        if ([NSStringFromClass([view class]) isEqualToString:@"_UITableViewSeparatorView"]) {

            cellView=[[UIView alloc] initWithFrame:CGRectMake(0, y, 320, 44)];

            if (i%2==0) {
                cellView.backgroundColor=[UIColor redColor];
            }else{
                cellView.backgroundColor=[UIColor greenColor];
            }

            [view addSubview:cellView];
            i++;
        }
    }

    tblView.backgroundView=view;
}

テーブルビューのスクロールで正しい結果が得られました。しかし、問題は、ユーザーが tableView を少なくとも一度スクロールすると機能することです。tableView でイベントを発生させることに成功すると、リロードが完了します。それで問題ありません。

これは、tableViewのスクロールで得た出力です。

ここに画像の説明を入力

また、このメソッドを作成して didScrollMethod を手動で呼び出しますが、完全には機能しないようです。

[tblView.delegate scrollViewDidScroll:(UIScrollView*)tblView.superclass];

ただし、以下のコードのようなメソッドを呼び出すことは絶対にうまくいきます。

- (void)viewDidLoad
{
    tblView=[[MyFirstView alloc] init];
    tblView.delegate=self;
    [tblView setFrame:self.view.frame];

    [self.view addSubview:tblView];

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

-(void)viewDidAppear:(BOOL)animated{
    [tblView.delegate scrollViewDidScroll:(UIScrollView*)tblView.superclass];
}

viewDidLoad で tableView をロードした後、viewDidAppear で didScroll を呼び出すと、正常に動作することを意味します。

スクロール中に最初の行が変動する場合は、コードの下に挿入します。

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView *view=[[UIView alloc] init];
    return view;
}
于 2013-07-31T05:54:51.563 に答える
2

を の に設定するbackgroundColor必要がcontentViewありUITableViewCellます。

以下のようにサンプル:

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

    if (cell==nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"identifier"]autorelease];
        cell.contentView.backgroundColor= [UIColor greenColor];
    }

    return cell;
}

tableView のセルに別の色を表示するには、次のようにします。

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

    if (cell==nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"identifier"]autorelease];

    }

    if(indexPath.row % 2)
    {
      cell.contentView.backgroundColor= [UIColor greenColor];
    }
    else
    {
      cell.contentView.backgroundColor= [UIColor yellowColor];
    }

    return cell;
}
于 2013-07-31T04:59:21.910 に答える
0

プレーン スタイルのテーブルでは、最後の行の下に行が表示されないため、テーブル ビュー セルを使用して目的の効果を生み出す方法はありません。唯一のオプションについては、交互パターンでビューを作成し、そのビューをテーブル ビューのフッター ビューにすることです。

このビューは、テーブル内の実際の行数が奇数と偶数の間で変化するときに更新されることに対処する必要があります。また、ユーザーがテーブルを上にスクロールした場合でも、フッターが画面の下部に到達するように、十分な高さにする必要があります。

于 2013-07-31T04:30:04.300 に答える
0

これは簡単です。行を表示したいだけの数のアイテムをデータソース配列に入れ、最初のアイテムを除いてすべて空の文字列にします。willDisplayCell:forRowAtIndexPath: 奇数番号のすべてのセルに背景色を適用します。

- (void)viewDidLoad {
    [super viewDidLoad];
    self.theData = @[@"Monthly Meeting",@"",@"",@"",@"",@"",@"",@"",@"",@""];
    [self.tableView reloadData];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.theData.count;
}

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row % 2 == 1) {
        cell.backgroundColor = [UIColor colorWithRed:232/255.0 green:238/255.0 blue:222/255.0 alpha:1];
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    cell.textLabel.text = self.theData[indexPath.row];
    return cell;
}
于 2013-07-31T05:00:56.130 に答える
0

簡単な数学の助けを借りて、backgroundColor を UITableViewCell の contentView に設定します。例:

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

if (cell==nil)
 {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"identifier"]autorelease];
    if (i%2==0) {
    cell.contentView.backgroundColor= [UIColor greenColor];
    }else{
    cell.contentView.backgroundColor= [UIColor redColor];
    }
}
return cell;
}
于 2013-07-31T06:26:35.573 に答える