如何在iOS中标记和取消标记行

时间:2012-07-19 14:06:00

标签: objective-c ios xcode uitableview storyboard

我有一个表视图包含通过storyboard创建的静态组我想使用复选标记来更改设置或选择不同的行但我不知道该怎么做,检查和取消选中行,以编程方式或通过xcode

你能帮帮我吗?

提前致谢!

5 个答案:

答案 0 :(得分:2)

您更改了UITableViewCell accessory type

对于选择的内容,使用tableView中的上述属性:didSelectRowAtIndexPath。

答案 1 :(得分:0)

对于法语/英语部分,我需要在默认情况下检查一个。 在你的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;
   }

答案 2 :(得分:0)

您可以使用

标记或取消标记行
        cell.accessoryType = UITableViewCellAccessoryCheckmark;

        cell.accessoryType = UITableViewCellAccessoryNone;

在didSelectRowAtIndexPath中添加上述方法,管理数组中的所有检查并重新加载数据。

答案 3 :(得分:0)

您可以选中或取消选中该视图,这很棒,但您在哪里保存模型?您使用什么属性来保存有关所选语言的信息?

我建议您使用某种枚举数据类型来保存您选择的语言并将其包含在.h文件中:

enum language {english, french};

@interface TesterProjectViewController : UIViewController
{
    enum language selectedLanguage;
}

接下来,我会选择viewDidLoad:上的语言作为您的默认语言,或使用NSUserDefaults选择他们最后选择的语言。

- (void)viewDidLoad
{
    [super viewDidLoad];

    self->selectedLanguage = english;

}

然后,我会使用我的UITableViewDelegateUITableViewDataSource函数来跟上需要选择哪种语言,以及哪些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:方法用于设置您在MODEL中使用的语言。然后cellForRowAtIndexPath:方法用于设置您的VIEW以匹配您的MODEL。您可能希望继续在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作为通知选择,因为它们不是“无线电”类型选择,而是每个选择都是开/关类型选择。

我希望这对你有帮助!

答案 4 :(得分:0)

使用此代码:

 - (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;
}