我有一个表视图包含通过情节提要创建的静态组我想使用复选标记来更改设置或选择不同的行,但我不知道该怎么做,以编程方式或通过 xcode 检查和取消选中行
你能帮帮我吗!
提前致谢!
我有一个表视图包含通过情节提要创建的静态组我想使用复选标记来更改设置或选择不同的行,但我不知道该怎么做,以编程方式或通过 xcode 检查和取消选中行
你能帮帮我吗!
提前致谢!
您更改 UITableViewCell附件类型
至于选择什么,你在tableView中使用上面的属性:didSelectRowAtIndexPath。
对于法语/英语部分,我假设您需要默认选中一个。在你的 cellForRowAtIndexPath 中:
if([cell.textLabel.text isEqualToString:@"English"])
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
然后,每当点击单元格时,您都需要确定其中一个已被点击,然后取消选中另一个。
在你的 didSelectRowAtIndexPath
if(indexPath.section ==0 && indexPath.row ==0) {
UITableViewCell * otherCell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0]];
otherCell.accessoryType = UITableViewCellAccessoryNone;
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else if(indexPath.section ==0 && indexPath.row ==1) {
UITableViewCell * otherCell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
otherCell.accessoryType = UITableViewCellAccessoryNone;
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
使用此代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *thisCell = [tableView cellForRowAtIndexPath:indexPath];
if (thisCell.accessoryType == UITableViewCellAccessoryNone) {
thisCell.accessoryType = UITableViewCellAccessoryCheckmark;
}else{
thisCell.accessoryType = UITableViewCellAccessoryNone;
}
}
- (UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath
*)indexPath {
//add your own code to set the cell accesory type.
return UITableViewCellAccessoryNone;
}
您可以选中或取消选中视图,这很好,但是您将模型保存在哪里?您使用什么属性来保存有关正在选择的语言的信息?
我建议您使用某种枚举数据类型来保存您选择的语言并将其包含在您的.h
文件中:
enum language {english, french};
@interface TesterProjectViewController : UIViewController
{
enum language selectedLanguage;
}
接下来我会选择你的语言viewDidLoad:
作为你的默认语言,或者NSUserDefaults
用来选择他们最后选择的语言。
- (void)viewDidLoad
{
[super viewDidLoad];
self->selectedLanguage = english;
}
然后,我将使用我的UITableViewDelegate
和UITableViewDataSource
函数来跟上需要选择哪种语言,以及哪些UITableViewCell
需要具有辅助视图:
-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.section==0)
{
switch (indexPath.row) {
case 0:
self->selectedLanguage = english;
break;
case 1:
self->selectedLanguage = french;
break;
default:
break;
}
}
[theTableView reloadData];
}
该didSelectRowAtIndexPath:
方法用于设置您在模型中使用的语言。然后该cellForRowAtIndexPath:
方法用于设置您的视图以匹配您的模型。您可能希望继续在您的 中设置复选标记didSelectRowAtIndexPath:
,但我更喜欢将其保留在 中,cellForRowAtIndexPath:
以便在重新加载我的数据时始终正确,如下所示:
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *theCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
// You may set up the cell differently or do whatever setup you need here:
if(indexPath.section==0)
{
if(self->selectedLanguage == english && indexPath.row==0)
theCell.accessoryType = UITableViewCellAccessoryCheckmark;
else if(self->selectedLanguage == french && indexPath.row==1)
theCell.accessoryType = UITableViewCellAccessoryCheckmark;
else
theCell.accessoryType = UITableViewCellAccessoryNone;
}
//More cell setup can go here, or setup cells for different rows/sections.
return theCell;
}
此外,正如其他人所指出的,我将UISwitch
用于底部的通知选择,因为它们不是“无线电”类型选择,而是每个选择都是开/关类型选择。
我希望这对你有所帮助!
您可以使用标记或取消标记行
cell.accessoryType = UITableViewCellAccessoryCheckmark;
cell.accessoryType = UITableViewCellAccessoryNone;
您在 didSelectRowAtIndexPath 中添加上述方法,管理数组中的所有检查并重新加载数据。