我想在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
}
}
}
答案 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);