3

サブクラス化UITableViewCellして、その中にいくつかのビュー (例: UILabel) があるとします。

テーブルがレンダリングされました。 今、そのビューを変更/アニメーション化したいと思います。

|                       |         |                       |
|-----------------------|         |-----------------------|
|      label alpha=1.0  | animate |      label alpha=0.5  | 
|-----------------------|  ===>   |-----------------------|
|      label alpha=1.0  |         |      label alpha=0.5  |
|-----------------------|         |-----------------------|
|                       |         |                       |

だからcellForRowAtIndexPath、、、今は良い選択肢willDisplayCelldidEndDisplayingCellはないと思います。

animateTestサブクラス内UITableViewCellに、ラベルのスタイルを変更するメソッドを作成しました。たとえば、色やアニメーションを実行します。

テーブルをレンダリングするView Controllerで、テーブルビューのサブビューで高速な列挙を実行しようとしました。列挙のおかげで、サブクラス化されたすべてのUITableViewCellインスタンスをキャッチしperformSelector、メソッドを起動するものを使用しましたanimateTest。しかし、何も変わりません。にしても[tableview reloadData]

テーブルがレンダリングされた後、テーブル セル内の何かをアニメーション化するにはどうすればよいですか? (使用[UIView animateWithDuration.........]) ?

前もって感謝します。

4

1 に答える 1

2

セルの初期化が間違っていたため、実際には何も起こっていませんでした。

以前、次の方法でセルを初期化しました。

NSString *cellIdentifier = [NSString stringWithFormat:@"Cell%d", [indexPath section]];

CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
NSArray *topLevelObjects;
topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:nil options:nil];

    for(id currentObject in topLevelObjects)
    {
        if([currentObject isKindOfClass:[CustomCell class]])
        {
            cell = (CustomCell *)currentObject;
            break;
        }
    }

次に、その方法でセルを初期化します。

static NSString *reuseIdentifier = @"Cell";

CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];

if (cell == nil) {
  cell = [[[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil] objectAtIndex:0];
}

そして、次を使用してすべてが正常に機能しています。

CustomCell *cell = (CustomCell*)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:3]];
[UIView animateWithDuration:2 animations:^{
    cell.element.alpha = 0;
}];

誰かが最初の方法で何が悪かったのかを簡単に説明できれば、私は感謝します. その初期化で何らかの方法でセルがリセットされたため、古いセル (アニメーションが適用された) が破棄され、セルが再度生成されたため、変更が表示されなかったと思われます。

少し前にいくつかのウェブサイトからスニペットをコピーしたので、使用に慣れましたが、どうやらそれは良い実装ではありません。

于 2013-04-18T10:25:13.970 に答える