制定警报重复日列表

时间:2016-05-16 06:13:52

标签: ios swift core-data nsdate uilocalnotification

我想在swift中为我的闹钟应用程序制作一个重复列表,如下图所示,我已尽力但我所有的尝试都失败了,我怎么做,我如何在一个属性中保存多个值在数据库中,我需要数组,我怎么做检查清单;我的项目几乎完成,唯一剩下的就是重复列表我没能成功

提前致谢

Reminder.swift

verride func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {


       if segue.identifier == "presentDay" {

            if let daysPickerVie

wController = segue.destinationViewController as? Days {
            let path = tableView.indexPathForSelectedRow
            detailLabel.text = daysPickerViewController.days[(path?.row)!]
        }
    }
}

Days.swift

class Days: UITableViewController
{
    var lastSelectedIndexPath = NSIndexPath(forRow: -1, inSection: 0)

    let days = [
        "Everyday",
        "Saturday",
        "Sunday",
        "Monday",
        "Tuesday",
        "Wednesday",
        "Thursday",
        "Friday"]


     var selectedDay:String?
     var selectedDayIndex:Int?
     var cell:UITableViewCell?


    override func viewDidLoad() {
      //navigationController?.navigationBar.topItem?.title = "Back"
    }

extension Days{


    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return days.count
        }

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCellWithIdentifier("daySelected", forIndexPath: indexPath) as UITableViewCell


    cell.accessoryType = .None
    cell.textLabel?.text = days[indexPath.row]
    selectedDay = days[indexPath.row]
    return cell
    }
}

extension Days {


        override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {


            if let cell = tableView.cellForRowAtIndexPath(indexPath) {
                if cell.selected {
                    cell.accessoryType = .Checkmark
                }
              }

        }
    override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {


            if let cell = tableView.cellForRowAtIndexPath(indexPath) {
                cell.accessoryType = .None
            }


        }

    }

enter image description here

3 个答案:

答案 0 :(得分:1)

我认为这里最合适的方法是好的旧位掩码。认识到按位操作对于许多人来说很难[1],请在下面找到一个没有按位运算符的解决方案。该属性可以是Int类型,它可以使用以下逻辑捕获所有可能的变体:

0        no days selected
1        Sundays selected
2        Mondays selected
4        Tuesdays selected
8        Wednesdays selected
// etc...

要存储的值是所有选择的总和,例如每周一和周五都是2 + 32 = 34

您可以编写一个优雅的struct来处理从原始值到所选日期列表的转换。

[1] 世界上有10种人。那些理解二进制数的人和那些不理解二进制数的人。

答案 1 :(得分:0)

我有同样的问题但是解决了它。没有必要使用“didDeselectRowAtIndexPath”方法。更新您的代码如下:

var selectedIndexPaths = [IndexPath]()

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
    let day = days[(indexPath as NSIndexPath).row]
    cell.textLabel?.text = day
    if self.selectedIndexPaths.contains(indexPath) {
        cell.accessoryType = .checkmark
    }
    else {
        cell.accessoryType = .none
    }

          return cell
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let cell = tableView.cellForRow(at: indexPath)
    if self.selectedIndexPaths.contains(indexPath) {
        self.selectedIndexPaths.remove(at: self.selectedIndexPaths.index(of: indexPath)!)
        cell?.accessoryType = .none
    }
    else {
        cell?.accessoryType = .checkmark
        self.selectedIndexPaths.append(indexPath)
    }
}

答案 2 :(得分:0)

回答关于Mundi答案的用户问题 供将来参考:您不需要开关。只需将数据解析为二进制:所以例如 二进制3是11 - >第一个是2s情况,第二个是1s情况。因此,二进制数的最后一位是1,然后选择星期日。如果右边的第二个是1则选择星期二,依此类推。

示例

var input = document.getElementById('value').value;
var values = input.split('^'); //will save an array with [value1, value 2]
var result = Math.pow(values[0], values[1]);
console.log(result);