私はネットからいくつかの情報を取得するスレッド化されたUITableViewを書いていました。画像がロードされている間、通常のcell.imageの代わりにアクティビティインジケータを表示したいと思います。どのようにUITableViewCellでサブビューの位置を変更しますか?
カスタムラベルとアクティビティインジケータが正しく動作しないという問題があります。ラベルは適切な位置に開始され、アクティビティインジケータが適切な位置に表示され、アニメーション化されますが、画像ダウンロードスレッドで最初のコールバックが発生すると(基本的に1つの画像のみが読み込まれます)、ビュー全体1つの参照があるかのようにリセットして、それらのフレームをすべてリセットしていました...
私はオーバーロードされました - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;問題の
コードはここにある:iphoneアプリケーション開発への新たな
// Set up the cell...
if(![[cell contentView] viewWithTag:indexPath.row+200]){
UILabel *newLabel = [[UILabel alloc] init];
newLabel.text = [[personList objectAtIndex:indexPath.row] name];
newLabel.frame = [[cell contentView] frame];
[[cell contentView] addSubview:newLabel];
newLabel.tag = indexPath.row+200;
[newLabel release];
}
else{
UILabel *alreadySetLabel = (UILabel *)[[cell contentView] viewWithTag:indexPath.row+200];
alreadySetLabel.text = [[personList objectAtIndex:indexPath.row] name];
alreadySetLabel.frame = [[cell contentView] frame];
}
UIImageView *tmpImageView = cell.imageView;
NSLog(@"In cell name: %@", [[personList objectAtIndex:indexPath.row] name]);
NSLog(@"In cell profile image: %@", [[personList objectAtIndex:indexPath.row] profileImage]);
if([[personList objectAtIndex:indexPath.row] profileImage]){
tmpImageView.image = [[personList objectAtIndex:indexPath.row] profileImage];
[[[cell contentView] viewWithTag:indexPath.row+100] removeFromSuperview];
UILabel *labelRef1 = (UILabel *)[[cell contentView] viewWithTag:indexPath.row+200];
[labelRef1 setFrame:CGRectMake(cell.contentView.frame.origin.x+70, cell.contentView.frame.origin.y, labelRef1.frame.size.width, labelRef1.frame.size.height)];
}
else{
NSLog(@"%@", [[personList objectAtIndex:indexPath.row] imageFilePath]);
if(![[cell contentView] viewWithTag:indexPath.row+100] && [[personList objectAtIndex:indexPath.row] imageFilePath]){
UIActivityIndicatorView *newSpin = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[newSpin setTag:indexPath.row+100];
[newSpin startAnimating];
[newSpin setFrame:CGRectMake(5, ((cell.contentView.frame.size.height/2)-7), 30, ((cell.contentView.frame.size.height/2)-7)+15) ];
[[cell contentView] addSubview:newSpin];
[newSpin release];
UILabel *labelRef2 = (UILabel *)[cell viewWithTag:indexPath.row+200];
[labelRef2 setFrame:CGRectMake(cell.contentView.frame.origin.x+70, cell.contentView.frame.origin.y, labelRef2.frame.size.width, labelRef2.frame.size.height)];
}
}
ブランド、2週間以内に、私はタグの使用を誤解していた場合、私は思ったんだけど?タグ値をindexPathにリンクすることができたら、カスタムビューを参照する一意の識別子を思いつくことができますか? 100と200は任意の値であり、私は誤って1つの画面の中でタグを再利用しないようにしています - 必要があるかどうかわからないので、タグはサブビューを通してのみ検索されると考えました。
アドバイスを事前にいただきありがとうございます。
おかげで、 ジョシュ...これは、よりエレガントにする方法についての一般的なヒントにもオープン
私は、単一の基準があったかのように正確にあなたが望むすべてリセット」によって何を意味するかわからないんだけど