ios TableView List中的三态UIButton

Posted

技术标签:

【中文标题】ios TableView List中的三态UIButton【英文标题】:Three state UIButton in ios TableView List 【发布时间】:2016-02-22 14:17:02 【问题描述】:

我在UITableView 有学生出勤名单。每个单元格都有一个UIButton 来设置学生出勤率,例如PresentAbsentLeave 按钮点击。如何在单个按钮上实现这一点。

【问题讨论】:

为什么不使用三个独立的按钮? 【参考方案1】:

您可以通过在UITableViewCell 中为您的UIButton 简单地实现以下@selector 来做到这一点。

- (void)btnSetMode:(id)sender

    UIButton *btn = (UIButton *)sender;
    if (btn.tag == 0)
    
        [btn setTitle:@"Present" forState:UIControlStateNormal];
        btn.tag = 1;
        // Define your required task...
    
    else if (btn.tag == 1)
    
        [btn setTitle:@"Absent" forState:UIControlStateNormal];
        btn.tag = 2;
        // Define your required task...
    
    else if (btn.tag == 2)
    
        [btn setTitle:@"Leave" forState:UIControlStateNormal];
        btn.tag = 3;
        // Define your required task...
    
    else if (btn.tag == 3)
    
        [btn setTitle:@"Attendance" forState:UIControlStateNormal];
        btn.tag = 0;
        // Define your required task...
    

您的单个​​按钮将按照您的意愿完成所有必需的任务。

【讨论】:

【参考方案2】:

如果您的tableViewCell 中有一个UIButton,那么add Target 到您的UIButtonset button Tag with indexPath.row 中的set button Tag with indexPath.row 就像-

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

    attendanceListTableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"cell"];

    cell.studentNameLbl.text=[NSString stringWithFormat:@"Student %ld",(long)indexPath.row];

    cell.editBtn.tag=indexPath.row;

    [cell.editBtn setTitle:[attandanceArry objectAtIndex:indexPath.row] forState:UIControlStateNormal];

    [cell.editBtn addTarget:self action:@selector(editAttendance:) forControlEvents:UIControlEventTouchUpInside];

    return cell;

-(void)editAttendance:(id)sender

    UIButton *btn=(UIButton*)sender;

    if ([btn.titleLabel.text isEqualToString:@"P"]) 
        [btn setTitle:@"A" forState:UIControlStateNormal];
        [attandanceArry replaceObjectAtIndex:btn.tag withObject:@"A"];
    else if ([btn.titleLabel.text isEqualToString:@"A"]) 
        [btn setTitle:@"L" forState:UIControlStateNormal];
        [attandanceArry replaceObjectAtIndex:btn.tag withObject:@"L"];
    else if ([btn.titleLabel.text isEqualToString:@"L"]) 
        [btn setTitle:@"P" forState:UIControlStateNormal];
        [attandanceArry replaceObjectAtIndex:btn.tag withObject:@"P"];
    


在这个attandanceArrymutableArray 具有所有默认值是"P"capacitynumber of studentseditBtn 是您的单元格UIButton。在这里,我使用custom tableViewCell class,即attendanceListTableViewCell 类具有UIButton。最后,当您完成编辑考勤时,您可以使用attandanceArry 作为结果数组。我希望这会对你有所帮助......:)

【讨论】:

很高兴为您提供帮助 :) 。如果此答案或任何其他答案解决了您的问题,请将其标记为已接受。【参考方案3】:

单击时更改按钮标题和背景颜色。就个人而言,我会使用三个不同的按钮,以便同时看到所有不同的选项。 UIPicker 也是一种选择。

【讨论】:

你是对的,但根据我的用户界面,我必须在每个单元格上使用单个按钮 你的用户界面是什么意思?您不能更改单元格内容以容纳三个按钮吗?如果你改变标题和颜色,你只需要一个按钮。【参考方案4】:

UISegmentedControl 是您要找的吗?

请参阅 Apple 文档here。它可以在情节提要中配置正确数量的段和段标题。当用户选择一个段时,它将被突出显示,而任何其他段都被取消选择。

【讨论】:

我想使用具有三个状态的单个按钮而不是分段控件。如果我第一次按下按钮显示存在,第二次按下显示不存在,第三次按下按钮显示离开

以上是关于ios TableView List中的三态UIButton的主要内容,如果未能解决你的问题,请参考以下文章

Java 中的三态复选框

操作系统介绍-操作系统历史,IO,进程的三态,同步异步阻塞非阻塞

可空布尔作为 C# 中的三态变量

第03课:生活中的状态模式——人与水的三态

第03课:生活中的状态模式——人与水的三态

进程的三态模型