默认CellAccessory(Default CellAccessory)

2019-10-17 08:01发布

如何设置的tableview的第一行勾选当应用程序启动? 我的意思是,当我现在开始应用,也有实现代码如下几排,当我点击其中的一些及其附属变化对号。 当点击一个又一个,另一个人来勾选和以前的对号自败。 所以现在我想的tableview的第一排,当应用程序开始被勾选,然后当我点击另一行是“uncheckmark”和“选中”新行等...

Answer 1:

尝试在这些帖子建议选择如何使用目标C在iphone表视图应用选择标记? 或iPhone:UITableView的CellAccessory对勾

基本上你需要跟踪使用比如字典或使复选标记的。 并在viewDidLoadinit方法使第一个单元格在词典中检查。 而绘制的细胞,总是检查是否在词典中的相应条目被选中或不和显示复选标记相应。 当用户点击一个细胞,修改在字典到选中/取消的值。

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

在.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];
}


Answer 2:

你可以一个整数设置为一个变量类似“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提供你会发现一个非常类似的概念。



Answer 3:

您可以使用,

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

设置firstCellSelectedviewDidLoad方法。



文章来源: Default CellAccessory