检查单元格是否在swift中有复选标记

时间:2017-07-14 17:25:13

标签: ios swift uitableview

在我的应用程序中,我正在研究类似于普通警报应用程序允许您重复几天的事情。在重复日的UITableViewController中,一周中每天有7个单元格(星期日,星期一等)。我想检查哪些单元格被勾选,然后将文本的标签(在另一个视图控制器中)更改为选中标记的单元格(文本:太阳,周一,星期二,星期一和星期二单元格被勾选。)< / p>

我尝试使用for循环并遍历每个单元格,并创建if语句,但是如果需要在此处使用,则有太多if语句。如果你们中的任何人能够向我展示一种更容易实现这一目标的方式,我将非常感激。以下是我的代码片段供参考。

class RepeatVC: UITableViewController {

    var repeatText: String? = nil //Text to change in this vc and set in other vc

  //  var checked: Bool? = false


    @IBOutlet var repeatView: UITableView! //UITableView in TableViewController

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "showRepeat" { //Segue identifier for segue to this viewcontroller

            let displayAddEditAlarm = segue.destination as! AddEditAlarm
            displayAddEditAlarm.repeatLabel.text = repeatText //Text I am trying to change in the other viewcontroller
        }
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)

        if(tableView.cellForRow(at: indexPath)?.accessoryType == UITableViewCellAccessoryType.checkmark){
            tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.none
//         //   checked = false
//            print("\(checked!)")

        }
        else{
            tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.checkmark
//           // checked = true
//            print("\(checked!)")
        }

//        if(checked == true){
//            if(tableView.cellForRow(at: indexPath)?.tag == 0){
//                repeatText = "Sunday!"
//                print("\(repeatText!) is the repeated day!!!")
//            }
//        }

    }

以下是一些解释我想要的图片:

Checkmark Cells Label Text

2 个答案:

答案 0 :(得分:1)

我通过执行以下步骤解决了我的问题。 我首先将一个swift文件连接到我的uitableviewcontroller。 然后我创建了一个名为weekdays的变量,并使其成为一种布尔数组。所有7个值都设置为false,这意味着在开头没有检查它们。然后,在didSelectRowAt中,我将其设置为如果选中标记并且选择了相同的单元格(意味着它将更改为无附件类型),则与标记对应的单元格将被设置为false值。如果它没有附件类型(意味着如果选中它将被检查),我反之亦然。然后,我在准备segue时说,如果这些值是真的,那么显示平日,周末,每日或不同日期等术语。

import Foundation
import UIKit

class RepeatVC: UITableViewController {



    var lastSelection: NSIndexPath!
    var repeatText = ""

    var checked: Bool? = false

    var weekdays: [Bool] = [false, false, false, false, false, false, false]


    override func viewDidLoad() {
        super.viewDidLoad()



        self.navigationItem.title = "Repeat"
    }


    @IBOutlet var repeatView: UITableView!

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "backFromRepeat" {

            if(weekdays[0] == true){
                repeatText += "Sun "
            }

            if(weekdays[1] == true){
                repeatText += "Mon "
            }

            if(weekdays[2] == true){
                repeatText += "Tue "
            }

            if(weekdays[3] == true){
                repeatText += "Wed "
            }

            if(weekdays[4] == true){
                repeatText += "Thu "
            }

            if(weekdays[5] == true){
                repeatText += "Fri "
            }

            if(weekdays[6] == true){
                repeatText += "Sat "
            }

            if(weekdays[0] == true && weekdays[1] == true && weekdays[2] == true && weekdays[3] == true
                && weekdays[4] == true && weekdays[5] == true && weekdays[6] == true){
                repeatText = "Daily"
            }

            else if(weekdays[0] == true && weekdays[6] == true){
                repeatText = "Weekends"
            }

            else if(weekdays[1] == true && weekdays[2] == true && weekdays[3] == true
                && weekdays[4] == true && weekdays[5] == true){
                repeatText = "Weekdays"
            }
            else if(weekdays[0] == false && weekdays[1] == false && weekdays[2] == false && weekdays[3] == false
                && weekdays[4] == false && weekdays[5] == false && weekdays[6] == false){
                repeatText = "Never"
            }

            let displayAddEditAlarm = segue.destination as! AddEditAlarm
            displayAddEditAlarm.repeatLabel.text = repeatText
            print("\(repeatText) is my text")
        }
    }


    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)

        if(tableView.cellForRow(at: indexPath)?.accessoryType == UITableViewCellAccessoryType.checkmark){
            tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.none
            if(tableView.cellForRow(at: indexPath)?.tag == 0){
                weekdays[0] = false
            }
            if(tableView.cellForRow(at: indexPath)?.tag == 1){
                weekdays[1] = false
            }
            if(tableView.cellForRow(at: indexPath)?.tag == 2){
                weekdays[2] = false
            }
            if(tableView.cellForRow(at: indexPath)?.tag == 3){
                weekdays[3] = false
            }
            if(tableView.cellForRow(at: indexPath)?.tag == 4){
                weekdays[4] = false
            }
            if(tableView.cellForRow(at: indexPath)?.tag == 5){
                weekdays[5] = false
            }
            if(tableView.cellForRow(at: indexPath)?.tag == 6){
                weekdays[6] = false
            }
        }
        else{
            tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.checkmark

            if(tableView.cellForRow(at: indexPath)?.tag == 0){
                weekdays[0] = true
            }
            if(tableView.cellForRow(at: indexPath)?.tag == 1){
                weekdays[1] = true
            }
            if(tableView.cellForRow(at: indexPath)?.tag == 2){
                weekdays[2] = true
            }
            if(tableView.cellForRow(at: indexPath)?.tag == 3){
                weekdays[3] = true
            }
            if(tableView.cellForRow(at: indexPath)?.tag == 4){
                weekdays[4] = true
            }
            if(tableView.cellForRow(at: indexPath)?.tag == 5){
                weekdays[5] = true
            }
            if(tableView.cellForRow(at: indexPath)?.tag == 6){
                weekdays[6] = true
            }
            print(weekdays)

        }


    }

答案 1 :(得分:-1)

每当你想要的东西和#34;回应&#34;对于行动,您可以考虑delegatesNotificationCenter

查看这个简单的教程,了解如何让代表为您工作 https://www.andrewcbancroft.com/2015/04/08/how-delegation-works-a-swift-developer-guide/

总之,当用户检查一天时,您的label.text将会更改