私はdrawInRect/drawAtPointを使って文字列/画像を描くことができます。 しかし、私はこのビューにUIProgressViewを追加したいのですか?UIViewサブクラスにuiprogressviewを描画する方法は?
私はのdrawRectメソッドをオーバーライドしています、
ので、私はのdrawRect内部UIProgressViewを作成する必要がありますか?ここで
が別のクラスのための私のUITableViewCellのサブクラスであるクラエルールのために(ちょうど私がtableViewCellのサブクラス化をしたかを示すために)、私はこれが正しいかどうかを確認していないが、これは下記UPDATED
私はいつもそれをやります。ここ
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
imageView = [[UIImageView alloc] initWithFrame:CGRectMake(5.0f,5.0f,40.0f,40.0f)];
//imageView.tag = kImage;
imageView.layer.cornerRadius = 5.0;
imageView.layer.masksToBounds = YES;
[self.contentView addSubview:imageView];
nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(55.0f, 5.0f, 220.0f, 18.0f)];
//nameLabel.tag = kName;
nameLabel.font = [UIFont boldSystemFontOfSize:16];
nameLabel.textColor = [[UIColor alloc] initWithRed:18.0/255.0 green:18.0/255.0 blue:18.0/255.0 alpha:1.0f];
//nameLabel.textColor = [UIColor blackColor];
nameLabel.backgroundColor = [UIColor clearColor];
[self.contentView addSubview:nameLabel];
//[nameLabel release];
statusLabel = [[UILabel alloc] initWithFrame:CGRectMake(55.0f, 27.0f, 220.0f, 20.0f)];
//lastMessageLabel.tag = kName;
statusLabel.font = [UIFont systemFontOfSize:13];
statusLabel.textColor = [UIColor colorWithRed:82.0/255.0
green:82.0/255.0
blue:82.0/255.0
alpha:0.8];;
statusLabel.backgroundColor = [UIColor clearColor];
[self.contentView addSubview:statusLabel];
//[lastMessageLabel release];
}
return self;
}
私はそれを使用する方法である - (無効)cellForRowAtIndexPath
static NSString *CellIdentifier = @"RootViewTableCell";
RootViewTableCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[RootViewTableCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier] autorelease];
}
//cell.backgroundView.backgroundColor = TABLE_BACKGROUND_COLOR;
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
User *user = [rows objectAtIndex:indexPath.row];
cell.nameLabel.text = user.name;
cell.statusLabel.text = user.status;
if (user.photo != nil)
{
//myUser.photo = user.photo;
cell.imageView.image = user.photo;
}
else{
cell.imageView.image = [UIImage imageNamed:@"person_default"];
}
return cell;
私はサブビューごとにタグを使用する必要があるのですか?私はそうしなければ何の違いも見ません。 テーブルビューのスクロールラグの原因となっているものはありますか?なぜなら私は前にテーブルビューに同じことを使用しているからです。テーブルのデータソースはコアデータであり、NSFetchedResultsControllerは挿入/削除/更新用ですが、データソースとしてNSMutableArrayにデータを格納することを確信しています。したがって、テーブルビューをスクロールするとコアデータアクセスはありません)。あなたが何か提案があれば、私は聞いて欲しいと思います。そして、私はUIViewのサブクラス化をしてdrawRectをオーバーライドする以上のことが大好きです。
おかげ
私はあなたのソリューションを試しましたが、それは動作しません、または私はそれを完全に理解していません。私は自分のUITableViewCellサブクラスでUIProgressViewプロパティを作成し、次にprogressViewを初期化してセルに追加します:[self.contentView addSubview:progressView]、デフォルトではprogressView hidden = YESを設定し、次にいくつかの条件に基づいてcellForRowAtIndexPathに設定します私はcell.progressView.hidden = NOを設定し、進捗値を渡します:cell.progressView.progress = progressValueしかし、私がアプリケーションをリロードすると、progressViewは表示されません。もう少し詳しく教えていただけますか?ありがとう – triston
進捗状況を初期化し、適切なフレームを設定していることを確認しましたか? –
あなたは正しいです、それは私の悪いです、私はフレームが間違っている(コピー&ペーストの問題)。今私はそれを正しく得た。私は、サブビューとしてUITableViewCellでuiprogressviewを追加しました。今は、UITableViewCellサブクラスの中に2つのサブビューがあります。 1.UIProgressView、2. UIView(他のすべてのNSStringベースのコンテンツを含みます)。それでもなお小さな問題があります。私はバックグラウンド操作を行うときに、最後のセルに新しいprogressViewが追加され、テーブルビューをスクロールしてから、最初のセルで実行されている別の全く同じprogressViewを見ることができます。何か案が? – triston