UITableView の特定のセルにアクティビティ インジケーターを追加しようとしています。メソッド didSelectRowAtIndexpath を使用してこれを正常に実行します
CGRect CellFrame = CGRectMake(260, 10, 20, 20);
actindicator = [[UIActivityIndicatorView alloc]initWithFrame:CellFrame];
[actindicator setHidesWhenStopped:NO];
[actindicator setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleGray];
actindicator.tag =1;
[[cell contentView] addSubview:actindicator];
問題は、別の方法からこれらの複数のアクティビティ インジケーターを制御する必要があることです。プロパティはこれを行う方法であると考えましたが、毎回 actIndicator の新しいインスタンスを初期化することで、アクティビティ インジケーターの「最新の」init 以外のすべてへの参照が失われるため、制御できるのは 1 つだけです。
すべての actIndicators への参照を維持して、すべてのアニメーション化を開始できるようにするには、ここで何をする必要がありますか (可能であれば?)。または、何らかの方法で actindicator.tag を使用して、何らかの形式の参照を制御できますか。
助けてくれてありがとう。
編集: (回答から派生) tableView で 1 のタグを持つアクティビティ インジケーターのすべてのインスタンス (可視セルのみ) にアクセスするには、別のメソッドから以下を使用できます。
for (UITableViewCell *cell in [self.tableView visibleCells]) {
UIActivityIndicatorView *actView = (UIActivityIndicatorView *)[cell.contentView
viewWithTag:1];
[actView startAnimating];
activityFlag = 1;
}
上記のメソッドは、表示されているすべてのセルを循環し、アクティビティ インジケーターのアニメーションを開始します。
テーブルビューがスクロールされるケースを処理するために、cellForRowAtIndexPath にある以下のメソッドを使用してインジケーターを再アニメーション化します。cellStateKey は、セルの横にチェックマークがあるかどうかを示します。セルにチェックマークがあり、アクティビティフラグ (非同期 Web サーバー呼び出しが進行中) が設定されている場合..その後、アニメーションを続行したい.(スクロールテーブルビューとして技術的にアニメーションを再開します。やめます)
if ([[rowData objectForKey:cellStateKey] boolValue]) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
if(cell.accessoryType == UITableViewCellAccessoryCheckmark &&activityFlag ==1){
for (UIView *sub in [[cell contentView] subviews]) {
if (sub.tag == 1) {
UIActivityIndicatorView *acView = (UIActivityIndicatorView *)
[cell.contentView viewWithTag:1];
[acView startAnimating];
}
}
元の質問で述べたように、メソッド didSelectRowAtIndexPath でアクティビティ インジケーターを初期化します (必要に応じてアクティビティ インジケーターも削除します)。