现在我是IOS编程的初学者,我创建了一个视图并在其中放置了一个tableview,然后我创建了一个带有我想用于tablecell的模板的xib,并为该调用创建了一个类。表格单元格有一个标签(在单元格的负载下设置),一个开关和一个文本字段。
表格加载正常,标签显示正确的文本,有12行从数据库加载。 SQLITE。
问题: 当我编辑第1行中的文本字段时,第9行中的文本字段被编辑,反之亦然。当我在第2行编辑时,第10行被编辑!第4,12行不仅包括文本字段,还包括切换开关切换。一些代码: AlertViewController.h
@property (weak, nonatomic) IBOutlet UITableView *table;
AlertViewController.m
@synthesize table;
static NSString *alertCellID=@"AlertViewCell";
----some code here ----
-(void)ViewDidLoad
{
---some code here----
self.table.delegate=self;
self.table.dataSource=self;
if(managedObjectContext==nil)
{
id appDelegate=(id)[[UIApplication sharedApplication] delegate];
managedObjectContext=[appDelegate managedObjectContext];
}
[self loadCategories];
[table registerNib:[UINib nibWithNibName:@"AlertViewCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:alertCellID];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [arrCategories count];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
Category *cat=[arrCategories objectAtIndex:indexPath.row];
AlertViewCell *cell = [tableView dequeueReusableCellWithIdentifier:alertCellID];
UILabel *lblGroupName=(UILabel *)[cell viewWithTag:101];
lblGroupName.text=cat.nameEn;
UITextField *txtHours=(UITextField *)[cell viewWithTag:103];
txtHours.delegate=self;
return cell;
}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
修改 我不知道它是否与滚动大小拟合8条记录有关?以及如何克服这个问题?
答案 0 :(得分:1)
好的我解决了它如下:
首先问题是因为我使用了dequeuereusablecellwithidentifier,它似乎每x行返回相同的引用,其中x是屏幕上没有滚动的行数,因此这使得单元格1 =单元格9,单元格2 =单元格10,依此类推。
所以要解决它,我必须使标识符唯一,并解决标识符用于加载已注册的nib的问题,我必须使用这个唯一的标识符名称注册nib ..这里是更改:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *identifier=[NSString stringWithFormat:@"%@%d",alertCellID,indexPath.row];
[table registerNib:[UINib nibWithNibName:@"AlertViewCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:identifier];
Category *cat=[arrCategories objectAtIndex:indexPath.row];
AlertViewCell *cell = (AlertViewCell *)[tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath];
if(!cell)
{
NSArray *topLevelObjects=[[NSBundle mainBundle] loadNibNamed:@"AlertViewCell" owner:self options:nil];
cell=[topLevelObjects objectAtIndex:0];
}
UILabel *lblGroupName=(UILabel *)[cell viewWithTag:101];
lblGroupName.text=cat.nameEn;
UITextField *txtHours=(UITextField *)[cell viewWithTag:103];
txtHours.delegate=self;
return cell;
}