- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试制作类似 this 的东西但我无法将日期添加到我的表格 View 中。我有一个包含日期(Date)、名称(String)和数字(Int)的 Realm 数据库。
我已成功将日期添加到每个部分,但我无法找出如何将名称和数字添加到单元格。有多个行具有相同的日期,但具有不同的名称和数字。
到目前为止,这是我的代码:
import UIKit
import RealmSwift
class myViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
var data:Results<Objects>!
var result:[Objects] = []
let cellSpacingHeight: CGFloat = 5
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
retreiveData()
}
func retreiveData() {
let realm = try! Realm()
// Retreive data
self.data = realm.objects(Objects.self).sorted(byKeyPath: "date",ascending: false)
self.result = Array(self.data)
print(result)
tableView.reloadData()
}
// MARK: - Table View delegate methods
func numberOfSections(in tableView: UITableView) -> Int {
return self.result.count
}
// Set the spacing between sections
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return cellSpacingHeight
}
/*func numberOfSections(in tableView: UITableView) -> Int {
return 1
}*/
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return result.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE - dd.MM.yyyy"
let stringGivenDate = dateFormatter.string(from: result[indexPath.section].date!)
cell.textLabel?.text = "\(stringGivenDate)"
cell.detailTextLabel?.text = "\(result[indexPath.section].name!)"
return cell
}
}
最佳答案
您需要做的是按日期对数据进行分组
let grouped: [Data: [Objects]]!
//...
self.result = Array(self.data)
grouped = Dictionary(grouping: result) { (element) -> Date in
return element.date
}
这将生成一个字典,将具有相同日期
的所有元素分组。现在,您可能需要做一些额外的决策,例如,仅按月份和年份对它们进行分组。
一旦你有了这个,你基本上就拥有了表的结构(部分是字典键和键后面的行数据。
为了让人信服,我可能还包括...
sections = grouped.keys.sorted()
可以更快地按指定顺序访问 key 。
然后您只需将适当的数据应用于您的委托(delegate)...
func numberOfSections(in tableView: UITableView) -> Int {
return sections.count
}
// Set the spacing between sections
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return cellSpacingHeight
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return grouped[sections[section]]!.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let rows = grouped[sections[indexPath.section]]!
let row = rows[indexPath.row]
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE - dd.MM.yyyy"
let stringGivenDate = dateFormatter.string(from: row.date!)
cell.textLabel?.text = "\(stringGivenDate)"
cell.detailTextLabel?.text = "\(row.name!)"
return cell
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
let date = sections[section]
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE - dd.MM.yyyy"
return dateFormatter.string(from: date)
}
顺便说一句,DateFormatter
很昂贵,因此您可以考虑将其设为实例属性
//
// ViewController.swift
// QuickTest
//
// Created by Shane Whitehead on 10/2/19.
// Copyright © 2019 Swann Communications. All rights reserved.
//
import UIKit
struct Stuff: CustomDebugStringConvertible {
let date: Date
let name: String
var debugDescription: String {
return "\(date) = \(name)"
}
}
extension Date {
static func random(daysBack: Int)-> Date {
let day = arc4random_uniform(UInt32(daysBack))+1
let hour = arc4random_uniform(23)
let minute = arc4random_uniform(59)
let today = Date(timeIntervalSinceNow: 0)
let calendar = Calendar.current
var offsetComponents = DateComponents()
offsetComponents.day = -Int(day)
offsetComponents.hour = Int(hour)
offsetComponents.minute = Int(minute)
let randomDate = calendar.date(byAdding: offsetComponents, to: today)
return randomDate!
}
var startOfDay: Date {
let calendar = Calendar.current
return calendar.startOfDay(for: self)
}
}
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
let cellSpacingHeight: CGFloat = 5
var grouped: [Date: [Stuff]] = [:]
var sections: [Date] = []
var headerDateFormatter: DateFormatter = {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMM yyyy"
return dateFormatter
}()
var cellDateFormatter: DateFormatter = {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE - dd.MM.yyyy"
return dateFormatter
}()
override func viewDidLoad() {
super.viewDidLoad()
retreiveData()
tableView.delegate = self
tableView.dataSource = self
tableView.rowHeight = UITableView.automaticDimension
tableView.sectionHeaderHeight = UITableView.automaticDimension
tableView.estimatedRowHeight = 44
tableView.estimatedSectionHeaderHeight = 44
tableView.reloadData()
}
func retreiveData() {
var data: [Stuff] = []
for index in 0..<100 {
let stuff = Stuff(date: Date.random(daysBack: 10), name: "\(index)")
data.append(stuff)
}
grouped = Dictionary(grouping: data) { (element) -> Date in
return element.date.startOfDay
}
sections = grouped.keys.sorted()
}
// MARK: - Table View delegate methods
func numberOfSections(in tableView: UITableView) -> Int {
return grouped.count
}
// Set the spacing between sections
// func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
// return cellSpacingHeight
// }
/*func numberOfSections(in tableView: UITableView) -> Int {
return 1
}*/
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return grouped[sections[section]]!.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let rows = grouped[sections[indexPath.section]]!
let row = rows[indexPath.row]
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE - dd.MM.yyyy"
let stringGivenDate = dateFormatter.string(from: row.date)
cell.textLabel?.text = "\(stringGivenDate)"
cell.detailTextLabel?.text = "\(row.name)"
return cell
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
let date = sections[section]
return headerDateFormatter.string(from: date)
}
}
关于ios - 带有单元格的 UITableView 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54611403/
我已经尝试在我的 CSS 中添加一个元素来删除每三个 div 的 margin-right。不过,似乎只是出于某种原因影响了第 3 次和第 7 次。需要它在第 3、6、9 等日工作... CSS .s
如何使 div/input 闪烁或“脉冲”?例如,假设表单字段输入了无效值? 最佳答案 使用 CSS3 类似 on this page ,您可以将脉冲效果添加到名为 error 的类中: @-webk
我目前正在尝试构建一个简单的 wireframe来自 lattice 的情节包,但由沿 y 轴的数百个点组成。这导致绘图被线框网格淹没,您看到的只是一个黑色块。我知道我可以用 col=FALSE 完全
在知道 parent>div CSS 选择器在 IE 中无法识别后,我重新编码我的 CSS 样式,例如: div#bodyMain div#paneLeft>div{/*styles here*/}
我有两个 div,一个在另一个里面。当我将鼠标悬停 到最外面的那个时,我想改变它的颜色,没问题。但是,当我将鼠标悬停 到内部时,我只想更改它的颜色。这可能吗?换句话说,当 将鼠标悬停到内部 div 上
我需要展示这样的东西 有人可以帮忙吗?我可以实现以下输出 我正在使用以下代码:: GridView.builder( scrollDirection: Axis.vertical,
当 Bottom Sheet 像 Android 键盘一样打开时,是否有任何方法可以手动上推布局( ScrollView 或回收器 View 或整个 Activity )?或者你可以说我想以 Bott
我有以下代码,用于使用纯 HTML 和 CSS 显示翻转。当您将鼠标悬停在文本上时,它会更改左右图像。 在我测试的所有浏览器中都运行良好,Safari 4 除外。据我收集的信息,Safari 4 支持
我构建了某种 CMS,但在使用 TinyMCE 和 Bootstrap 时遇到了一些问题。 我有一个页面,其中概述了一个 div,如果用户单击该 div,他们可以从模态中选择图像。该图像被插入到一个
出于某种原因,当我设置一个过渡时,当我的鼠标悬停在一个元素上时,背景会改变颜色,它只适用于一个元素,但它们都共享同一个类?任何帮助我的 CSS .outer_ad { position:rel
好吧,这真的很愚蠢。我不知道 Android Studio 中的调试监视框架发生了什么。我有 1.5.1 的工作室。 是否有一些来自 intellij 的 secret 知识来展示它。 最佳答案 与以
我有这个标记: some code > 我正在尝试获取此布局: 注意:上一个和下一个按钮靠近#player 我正在尝试这样: .nextBtn{
网站:http://avuedesigns.com/index 首页有 6 个菜单项。我希望每件元素在您经过时都有自己的颜色。 这是当您将鼠标悬停在 div 上时将所有内容更改为白色的行 li#hom
我需要在 index.php 文件中显示它,但没有任何效果。我所有的文章都没有正确定位。我将其用作代码: 最佳答案 您可以首先检查您
我是一名优秀的程序员,十分优秀!