1

如何在应用程序启动时设置第一行表格视图的复选标记?我的意思是当我现在启动应用程序时,tableview 中的行数很少,当我点击其中一些时,它的附件更改为复选标记。当单击另一个时,另一个带有复选标记并且以前的复选标记消失。因此,现在我希望在启动应用程序时选中 tableview 的第一行,然后当我单击另一行时,它会“取消选中标记”和“选中标记”新行等...

4

3 回答 3

1

您可以将整数设置为类似于“checkedCell”的变量,将该值默认设置为单元格 0,并在cellForRowAtIndexPath检查中查看单元格是否已被检查,如果未更改附件以使其检查并更新您的变量。

-(void)viewWillAppear{
     currentCheckedCell = 0;
}

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    //
    // Create cells -- if indexpath.row is equal to current checked cell reload the table with the correct acessories.
    //
    static NSString *cellIdentifier = @"RootMenuItemCell";
    MyCell *cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (cell == nil) {

        cell = [[MyCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
        NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"MyCell" owner:self options:nil];
        for (UIView *view in nibContents) {
            if ([view isMemberOfClass:[MyCell class]]) {
                cell = (MyCell *)view;
                break;
            }
        }

        //OTHER CELL CREATION STUFF HERE

        // cell accessory
        UIImage *accessory = [UIImage imageNamed:@"menu-cell-accessory-default.png"];
        UIImage *highlighted = [UIImage imageNamed:@"menu-cell-accessory-selected.png"];
        if(indexPath.row == currentCheckedCell){
            //DEFAULT ACCESSORY CHECK 
            // cell.accessoryType = UITableViewCellAccessoryCheckmark;

            UIImageView *accessoryView = [[UIImageView alloc] initWithImage:accessory highlightedImage:highlighted];
        }else{
             //DEFAULT ACCESSORY NONE 
            // cell.accessoryType = UITableViewCellAccessoryNone;
              UIImageView *accessoryView = [[UIImageView alloc] initWithImage:accessory highlightedImage:accessory];
         }
        [cell setAccessoryView:accessoryView];

    } 
return cell;
}

- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
      //UPDATE SELECTED CELL & RELOAD TABLE
      currentCheckedCell = indexPath.row;
      [self.tableview reloadData];
}

另外值得注意的是,我的示例使用自定义图像作为配件。如果您查看@ACB 提供的链接,您会发现一个非常相似的概念。

于 2012-10-24T19:36:43.130 回答
1

尝试这些帖子中建议的选项如何使用objective c在iphone中的表格视图上应用复选标记?iPhone :UITableView CellAccessory 复选标记

基本上,您需要使用字典来跟踪复选标记。并且 In viewDidLoadorinit方法使第一个单元格在字典中被选中。绘制单元格时,请始终检查字典中的相应条目是否已选中,并相应显示复选标记。当用户点击一个单元格时,将字典中的值修改为选中/未选中。

更新: 这是一个示例代码。

在 .h 文件中将属性声明为

@property(nonatomic) NSInteger selectedRow;

然后使用下面的代码,

- (void)viewDidLoad {
  //some code...

  self.selectedRow = 0; //if nothing should be selected for the first time, then make it as -1
  //create table and other things
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // create cell and other things here

    if (indexPath.row == self.selectedRow)
    {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    } else {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // some other code..

    if (indexPath.row != self.selectedRow) {
       self.selectedRow = indexPath.row;
    }

    [tableView reloadData];
}
于 2012-10-24T19:36:55.800 回答
1

您可以使用,

if (firstCellSelected)
    {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    } 

在方法中设置firstCellSelected标志。viewDidLoad

于 2012-10-31T22:35:52.613 回答