我使用以下代码来制作标签视图。单击一个选项卡时它会向下展开,这当前工作正常但如果我打开indexPath为0的第一个选项卡,它应该加载一个单独的自定义打开视图,它将加载但是当我转到其他indexPath选项卡时它会显示相同的视图,但如果我重新加载应用程序并首先转到其他选项卡,他们加载正确的视图。这几乎就像应用程序正在制作缓存一样?
有没有办法解决这个问题?
由于
- (void)viewDidLoad {
row = 1000;
NSLog(@"row is %d", row);
[super viewDidLoad];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
infoStory = [userDefaults objectForKey:@"storyname"];
// Do any additional setup after loading the view.
numbers = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8", nil];
// Initialize thumbnails
text = [NSArray arrayWithObjects: @"Arriving by Bus or Train", @"Arriving by Car (Autobahn 5)", @"Arriving by Car (Autobahn 6)", @"Wifi", @"Registration", @"Refreshments", @"Evening Event", @"Contact Information", nil];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(row == indexPath.row){
if(indexPath.row == 0){
static NSString *simpleTableIdentifier2 = @"TableViewCellOPENEDbustaxi2";
TableViewCell1 *cell = (TableViewCell1 *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier2];
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableViewCellOPENEDbustaxi2" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
cell.text.text = [text objectAtIndex:indexPath.row];
return cell;
}
else{
static NSString *simpleTableIdentifier = @"TableViewCellOPENED";
TableViewCell1 *cell2 = (TableViewCell1 *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell2 == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableViewCellOPENED" owner:self options:nil];
cell2 = [nib objectAtIndex:0];
}
cell2.text.text = [text objectAtIndex:indexPath.row];
return cell2;
}
}
else{
static NSString *simpleTableIdentifier = @"TableViewCellINFO";
TableViewCell1 *cell = (TableViewCell1 *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableViewCellINFO" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
cell.text.text = [text objectAtIndex:indexPath.row];
return cell;
}
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [numbers count];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(row == indexPath.row){
row = 1000;
NSLog(@"row is %d", row);
[self.tableViewObject reloadData];
}
else{
row = indexPath.row;
NSLog(@"row is %d", row);
[self.tableViewObject reloadData];
}
}
@end
答案 0 :(得分:1)
我认为问题可能是您没有在XIB文件的单元格的属性检查器中指定正确的重用标识符。你应该检查一下你是否使用了错误的一个,因此出列将返回一个意外的单元格。
您还可以手动设置相应的reuseIdentifier
,并使用setValue:forKey:
小窍门:
static NSString *simpleTableIdentifier2 = @"TableViewCellOPENEDbustaxi2";
TableViewCell1 *cell = (TableViewCell1 *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier2];
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableViewCellOPENEDbustaxi2" owner:self options:nil];
cell = [nib objectAtIndex:0];
[cell setValue:simpleTableIdentifier2 forKey:@"reuseIdentifier"];
}
等等其他单元格和标识符。