4

こんにちは誰かがiOS6.0で編集中にテーブルセルのコンポーネントを自動的にレイアウトする方法を理解するのを手伝ってくれませんか?属性インスペクターの右上に設定されたUITableViewCell自動サイズ設定オプションのAutoLayoutFALSEを設定しました!セルの右側の画像ビューは、削除ボタンで重なっています。添付画像をご参照ください。以下はこのためのコードです。とにかくこの問題を修正できますか?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    PlayerCell *cell = (PlayerCell *)[tableView dequeueReusableCellWithIdentifier:@"PlayerCell"];
    Player *player = [self.players objectAtIndex:indexPath.row];
    cell.nameLabel.text = player.name;
    cell.gameLabel.text = player.game;
    cell.ratingImageView.image = [self imageForRating:player.rating];
    return cell;
}

- (UIImage *)imageForRating:(int)rating
{
    switch (rating)
    {
        case 1: return [UIImage imageNamed:@"1StarSmall.png"];
        case 2: return [UIImage imageNamed:@"2StarsSmall.png"];
        case 3: return [UIImage imageNamed:@"3StarsSmall.png"];
        case 4: return [UIImage imageNamed:@"4StarsSmall.png"];
        case 5: return [UIImage imageNamed:@"5StarsSmall.png"];
    }
    return nil;
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        [self.players removeObjectAtIndex:indexPath.row];
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }     
}

次のデリゲートメソッドを追加しました。セルをスワイプすると正常に機能します。

-(void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath
{
    PlayerCell *cell = (PlayerCell *)[tableView cellForRowAtIndexPath:indexPath];
    cell.ratingImageView.hidden = YES;
}

- (void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath
{
    PlayerCell *cell = (PlayerCell *)[tableView cellForRowAtIndexPath:indexPath];
    cell.ratingImageView.hidden = NO;
}

...しかし、editButtonItemボタンを押しても、このメソッドは呼び出されません。それは奇妙です!何かが足りません。編集/完了ボタンが押されたときに呼び出される次のメソッドを追加しましたが、編集用に選択されるセルを検出する方法がありません!

- (void)setEditing:(BOOL)editing animated:(BOOL)animate
{
    [super setEditing:editing animated:animate];
    if(editing)
    {
        NSLog(@"editMode on");
    }
    else
    {
        NSLog(@"Done leave editmode");
    }
}

ユーザーが左の丸いボタンをクリックしたときに、そのボタンのクリックにセレクターを追加してセルインデックスを取得する方法はありますか?

画像

4

1 に答える 1

6

AutoLayoutを使用していない場合、ratingImageViewは自動サイズ変更マスクを使用してサイズ変更と配置を行います。デフォルトでは、これは左右の距離が固定されており、サイズが変更されないことを意味します。

セルを切り替えてcontentViewを編集すると、移動してサイズが変更されますが、ratingImageViewは上下に固定されたままになります。これは、一時的に(学習目的で)セルのcontentViewに背景色を設定し、セルを編集および削除したときにサイズがどのように変更されるかを確認することで視覚化できます。

必要なのは、評価ビューを左端ではなく右端から一定の距離に保つことです。これは、InterfaceBuilder(XIBまたはストーリーボードを実行する場所)で変更するか、ratingImageViewのautoresizingMaskプロパティを設定することでコードで変更できます。


このタブに移動

このタブに移動

このように自動サイズ変更を変更します

ここに画像の説明を入力してください

またはコードでそれを行う

// in code you specify what should be flexible instead of what should be fixed...
[ratingImageView setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin];
于 2012-09-28T10:23:51.980 に答える