获取带有复选标记的单元格标签

时间:2013-12-06 12:28:57

标签: ios iphone tableview

我正在使用表格视图。我在第一次点击屏幕时添加了复选标记附件,并在第二次点按时删除了此复选标记。我在表视图的单元格上添加了几个ckeckmarks。现在我希望具有复选标记的单元格的标签应该显示在NSlog上。  请帮我解决这个问题。任何帮助都会非常有用。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (tableView.tag == 0)
    {
        return [celltitles count];
    }
    else
    {
    return 7;
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    if (tableView.tag == 0)
    {
        cell.textLabel.text = [celltitles objectAtIndex:indexPath.row];

        if (indexPath.row == 0)
        {
            habitname = [[UITextField alloc]initWithFrame:CGRectMake(150, 0, 150, 50)];
            habitname.placeholder = @"Habit Name";
            habitname.delegate= self;
            [cell addSubview:habitname];
        }
                else if (indexPath.row == 1)
        {
            timelbl = [[UILabel alloc] initWithFrame:CGRectMake(100, 0, 220, 50)];
            timelbl.text = @"OFF";
            timelbl.textAlignment = NSTextAlignmentCenter;
            [cell addSubview:timelbl];

            timetitlelbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 50)];
            timetitlelbl.text = @"Alert";
            timetitlelbl.textAlignment = NSTextAlignmentCenter;
            [cell addSubview:timetitlelbl];

            toggleswitch = [[UISwitch alloc] initWithFrame:CGRectMake(250, 5, 50, 60)];
            toggleswitch.on = NO;
            [toggleswitch addTarget:self action:@selector(toggleSwitch) forControlEvents:(UIControlEventValueChanged | UIControlEventTouchDragInside)];
            [cell addSubview:toggleswitch];

        }
    }
    else if (tableView.tag == 1)
    {
        cell.textLabel.text = [daysarray objectAtIndex:indexPath.row];

    }

    return cell;
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    if (indexPath.row == 1)
    {
        if (toggleswitch.on)
        {
            [self datepickershown:timelbl.text animated:YES];

            if (self.datePickerIsShowing)
            {
                //[self datepickershown];
                //[self hideDatePickerCell];
                [dscptxt resignFirstResponder];
            }
            else
            {
                [dscptxt resignFirstResponder];
                [self.timelbl resignFirstResponder];
                [self showDatePickerCell];
            }
        }
        else
        {
            timelbl.textColor = [UIColor grayColor];
        }

    }
    else if (indexPath.row > 2 && indexPath.row <10)
    {
        NSLog(@"I am Selectin the row");

        UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
        if (cell.accessoryType == UITableViewCellAccessoryNone)
        {
            cell.accessoryType = UITableViewCellAccessoryCheckmark;

        }
        else if (cell.accessoryType == UITableViewCellAccessoryCheckmark)
        {
           // NSLog(@"Selected Accessory Is %d",cell.accessoryType);
            cell.accessoryType = UITableViewCellAccessoryNone;
        }
    }

    [self.tableview deselectRowAtIndexPath:indexPath animated:YES];
}

- (void)savedata:(id)sender
{
}

以上是我正在使用的代码以及我想要日志的保存操作。

2 个答案:

答案 0 :(得分:3)

请勿使用UITableView存储您的数据。细胞被重复使用,因此是检测您选择的项目的可靠方法。

例如,您可以存储是否在数组中选择了某个项目。然后在cellForRowAtIndexPath确定是否应显示复选标记。在didSelectRowAtIndexPath中,您更新模型(您的数组)并请求重新加载特定单元格。

这将导致更好的MVC分离。

编辑:添加了UITableView内容的示例

// for this example we'll be storing NSIndexPath objects in our Model
// you might want to use a @property for this
NSMutableSet *model = [NSMutableSet set];


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    ...

    if([model containsObject:indexPath]) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    } 
    else {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }

    ... 
}


-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    ...

    // update the model
    if([model containsObject:indexPath]) {
        [model removeObject:indexPath];
    } 
    else {
        [model addObject:indexPath];
    }

    // request reload of selected cell
    [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation: UITableViewRowAnimationFade];

    ...

}

现在记录所有选定的项目应该相当容易,而不必使用UITableView:它现在就在你的模型中了!

答案 1 :(得分:0)

制作一个for循环:

NSMutableArray *mutArray = [[NSMutableArray alloc] init];

for(i = 0;i <= self.rowCount-1;i++)
 {

UITableViewCell *cell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];

if (cell.accessoryType == UITableViewCellAccessoryCheckmark)
{
           [mutArray addObject:[NSIndexPath indexPathForRow:i inSection:0]];
 }

}
NSLog(@"Array: %@", mutArray);