我的设置屏幕为UITableView
,其中包含多行设置。当用户打开该屏幕时,我加载存储的设置并填充到UITextField
等......一切都很好。
但是有一些复选标记设置,我一直试图以编程方式检查这个但是不起作用,这是我的代码:
-(void)viewDidAppear:(BOOL)animated{
[self LoadCurrentRecord];
if(_previousValid)
{
NSIndexPath *regionFromData = [NSIndexPath indexPathForRow:_regionAutoCheck inSection:3];
[self.tableView cellForRowAtIndexPath:regionFromData].accessoryType = UITableViewCellAccessoryCheckmark;
}
[self.tableView reloadData];
}
事实上,我可以看到数据可以通过支票加载到此类别,但我没有看到勾选标记图标。
有什么想法吗?
答案 0 :(得分:0)
您必须在此方法中设置
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell; // Create Cell
if(_previousValid && indexPath.row == _regionAutoCheck && indexPath.section == 3 )
{
// SET CHECKMARK
} else {
// SET NONE
}
}
答案 1 :(得分:0)
以下是使用table-和collectionViews的方法:
-tableView:cellForRowAtIndexPath:
/ -collectionView:cellForItemAtIndexPath:
中配置每个单元格仅,就像PKT的答案一样。此单元格可能会被重复使用,因此假设您对此单元的类型所做的任何更改都需要在此更新。-reloadItemAtIndexPath
。这将导致tableView / collectionView调用-tableViewcellForRowAtIndexPath:
/ - `collectionView:cellForItemAtIndexPath:'再次。由于此方法现在包含基于数据对象配置单元格的逻辑,因此所有内容都是同步的。我无法强调 1。的重要性。最简单的例子是:每个部分都是一个数据对象数组。如果您有多个部分,则可以将每个数组添加到另一个数组:
// one section:
NSArray *myData =
@[
@[dataItem1, dataItem2, dataItem3]
@[dataItem4, dataItem5, dataItem6]
];
- (NSUInteger) numberOfSectionsInTableView: (UITableView *) tableView
{
return myData.count;
}
- (NSUInteger) tableView: (UITableView *) tableView numnberOfRowsInSection: (NSUInteger) section
{
NSArray *dataForSection = myData[section];
return dataForSection.count;
}
- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath:
{
NSArray *dataForSection = myData[indexPath.section];
MyObject *dataObject = dataForSection[indexPath.row];
NSString * cellID = @"myCellID";
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: cellID];
if (nil == cell)
{
// create a cell
// ...
}
// configure the cell based on the data object
if (dataObject.isBlue)
{
cell.contentView.backgroundColor = [UIColor blueColor];
}
else
{
// N.B.! don't forget the else clause, as cells are reused, so this
// cell might be recycled from a cell that was used to display
// the data of a blue data object before.
cell.contentView.backgroundColor = [UIColor blueColor];
}
return cell;
}
答案 2 :(得分:0)
最后,我找到了一个非常简单的解决方案。
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.row == _regionAutoCheck && indexPath.section == 3)
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else{
cell.accessoryType = UITableViewCellAccessoryNone; // for other cases remove it
}
}
<强>更新强>
之后,将[self.tableView reloadData];
添加到-(void)viewDidAppear:(BOOL)animated
,您就会看到它有效。
就是这样。
感谢大家的帮助