私はTableViewで作業しており、カスタムTableViewCellに小さな画像、名前、および1つのカスタム画像(目盛り付きで目盛りなし)を付けて、セルが選択されているかどうかを示すアクセサリーを作成したいと考えていました。細胞。複数のセルを選択したい場合は、選択したセルにティック画像を表示し、選択されていないセルにチェックを外す画像を表示し、その後ボタンをクリックすると、選択したセルIDを取得できるはずです。
tableView では、サーバーからすべての値を取得し、画像も URL から取得していますが、Tickmark と Unselected Tick mark の画像はプロジェクト自体で使用されます。
これまでに作成したのは、タイプUITableViewCellの「ResultTableCell」のクラス.h、.m、.xibと、TableViewとボタンが上部にあるメインビュー「結果」です(ボタンをクリックすると、選択した値が取得されますセル)
ResultTableCell.h
#import <UIKit/UIKit.h>
@interface ResultTableCell : UITableViewCell
@property (nonatomic, retain) IBOutlet UILabel *nameLabel;
@property (nonatomic, retain) IBOutlet UIImageView *thumbImageView;
ResultTableCell.m
#import "ResultTableCell.h"
@implementation ResultTableCell
@synthesize nameLabel,thumbImageView;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
}
return self;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
ResultTableCell.xib xib の右側の画像は、アクセサー画像が来る場所です。 ResultTableCell.xib
そして、メインの xib Result.h
#import <UIKit/UIKit.h>
#import "ASIFormDataRequest.h"
@interface Results : UIViewController <UITableViewDelegate,UITableViewDataSource>
{
NSMutableArray *nameData;
}
@property (nonatomic, retain)NSMutableArray *nameData;
@property (nonatomic, retain)NSMutableArray *ImageData;
@property (nonatomic, retain)NSMutableArray *idData;
@property (nonatomic, retain)UITableView *table;
@property (nonatomic, retain) IBOutlet UIButton *done;
@property (nonatomic, retain) NSMutableArray *arFors;
-(IBAction)save_done:(id)sender;
結果.m
#import "Results.h"
#import "ResultTableCell.h"
@interface Results ()
@end
@implementation Results
@synthesize arFors;
@synthesize done,nameData,table,addressData,ImageData,idData;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
self.arFors=[NSMutableArray array];
// I am Getting Name,id and image url data from my HomeViewController
NSLog(@"Name Data from home view is %@",nameData); // 10 Names get's printed in log
NSLog(@"id Data is %@",idData);
NSLog(@"URL image data is %@",ImageData);
table = [[UITableView alloc]initWithFrame:CGRectMake(0, 221, 320, 327) style:UITableViewStylePlain];
table.delegate = self;
table.dataSource = self;
[self.view addSubview:table];
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSLog(@"Name data count is %d",nameData.count);
return nameData.count;
//return 10;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 70;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
/* UITableViewCell *cell = [tableView dequeueReusableHeaderFooterViewWithIdentifier:@"MainCell"];
if (cell == nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MainCell"];
}*/
static NSString *simpleTableIdentifier = @"ResultTableCell";
ResultTableCell *cell = (ResultTableCell *)[table dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ResultTableCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
if ([self.arFors containsObject:[NSNumber numberWithInt:indexPath.row]]) {
cell.accessoryView = [[ UIImageView alloc ]
initWithImage:[UIImage imageNamed:@"table_tick" ]];
}
else {
cell.accessoryView = [[ UIImageView alloc ]
initWithImage:[UIImage imageNamed:@"table_add" ]];
}
NSLog(@"data is ************* %@",nameData);
cell.nameLabel.text = [nameData objectAtIndex:indexPath.row];
NSURL * imageURL = [NSURL URLWithString:[ImageData objectAtIndex:indexPath.row]];
NSData * imageData = [NSData dataWithContentsOfURL:imageURL];
UIImage * image2 = [UIImage imageWithData:imageData];
cell.ImageView.image = image2;
cell.ImageView.contentMode = UIViewContentModeScaleAspectFit;
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"didSelectRowAtIndexPath %d",indexPath.row);
if ([self.arFors containsObject:[NSNumber numberWithInt:indexPath.row]]) {
[self.arFors removeObject:[NSNumber numberWithInt:indexPath.row]];
}
else{
[self.arFors addObject:[NSNumber numberWithInt:indexPath.row]];
// [self.table cellForRowAtIndexPath:indexPath];
}
[tableView deselectRowAtIndexPath:indexPath animated:YES];
[tableView reloadData];
}
-(IBAction)save_done:(id)sender
{
NSLog(@"selected cell values are %@",self.arFors);
}
このコードを使用すると、すべてが正常に機能します (選択したセルにチェック画像が表示され、選択されていないセルのチェックを外し、[完了] ボタンをクリックすると、選択したセルの値が取得されます)、
しかし、セルをタップすると問題が発生し、ハングしたようになり、didselectrowatindexpath メソッドで[tableView reloadData]が起動されるため、アクセサー イメージを変更するのに 5 ~ 6 秒かかるため、すべてのデータがテーブルビューで再度リロードされ、アクセサー イメージが変更されます。 、私のコードを修正するか、高速に動作するように拡張してください。私は多くの方法を試しましたが、テーブルをリロードせずにそれを行うことができず、テーブルをリロードすると時間がかかります。コーディングのヘルプは大変です。