【发布时间】:2019-11-18 17:57:35
【问题描述】:
我希望在 tableView 的每一行中都有相同的“保存到日历按钮”,并且每个按钮从通过 api 使用可解码的 JSON 导入的 JSON 中打开一个不同的事件。
我需要为每个按钮分配 indexPath.row 以便第一个按钮填充来自第一个 JSON 对象的信息,第二个按钮填充来自第二个 JSON 对象的信息,等等...有一个示例下面的表格视图。我希望每个按钮使用从 api 传递的“标题”将不同的事件保存到用户的日历中。 (传递给您在下面看到的“标题”UILabel 的相同标题。)我还希望“描述”自动填充来自 api 的描述。我已经使用 decodedable 导入了 json 信息。
这是在 viewController 中找到的 cellForRowAt 代码:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "eventCell", for: indexPath) as! EventTableViewCell
let item = page!.tradeshows[indexPath.row]
cell.registrationUrl = item.link
cell.eventTitle.text = item.title
cell.eventDate.text = item.tradeshowDescription
cell.addEventToCalendar(title: item.title!, description: item.tradeshowDescription, startDate: NSDate() as Date, endDate: NSDate() as Date)
return cell
}
我需要上面应用的 JSON 信息(标题:item.title!)和(描述:item.tradeshowDescription),以便在每行中按下“保存到日历”按钮时自动填充信息。我需要分配 indexPath,以便在保存到日历时自动填充事件的信息是每一行的正确信息。
感谢任何建议。
在 TableViewCell 中找到自定义 Xib 单元类代码:
import UIKit
import EventKit
class EventTableViewCell: UITableViewCell {
var registrationUrl : URL!
@IBOutlet weak var eventDate: UILabel!
@IBOutlet weak var eventTitle: UILabel!
@IBOutlet weak var saveToCalendarButton: UIButton!
@IBOutlet weak var registerButton: UIButton!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
selectionStyle = UITableViewCell.SelectionStyle.none
}
@IBAction func registerButtonPressed(_ sender: Any) {
UIApplication.shared.open(registrationUrl)
}
@IBAction func saveToCalenderButtonPressed(_ sender: Any) {
addEventToCalendar(title: "", description: "", startDate: NSDate() as Date, endDate: NSDate() as Date)
}
func addEventToCalendar(title: String, description: String?, startDate: Date, endDate: Date, completion: ((_ success: Bool, _ error: NSError?) -> Void)? = nil) {
let eventStore = EKEventStore()
eventStore.requestAccess(to: .event, completion: { (granted, error) in
if (granted) && (error == nil) {
let event = EKEvent(eventStore: eventStore)
event.title = title
event.startDate = startDate
event.endDate = endDate
event.notes = description
event.calendar = eventStore.defaultCalendarForNewEvents
do {
try eventStore.save(event, span: .thisEvent)
} catch let e as NSError {
completion?(false, e)
return
}
completion?(true, nil)
} else {
completion?(false, error as NSError?)
}
})
}
}
【问题讨论】:
-
你为什么要用 [String()] 而不是 [String]() 来创建一个 String() 类型的函数数组,
-
我不确定应该如何格式化该变量。我在每一行都有一个“保存事件”按钮。我希望当您单击第一行中的“保存事件”按钮时,它将带有标题的事件作为“标题”字符串从第一个 json 对象中的标题保存到用户的日历中。然后,如果您单击第二行中的下一个“保存事件”按钮,它会将第二个 json 对象的标题保存为事件标题。
-
正如我的评论中所建议的那样,您需要一个字符串数组,即 [String]() 以便您摆脱错误并能够将字符串保存在数组中
-
请添加
addEventTocalendar的代码,这里是从保存到日历中读取的事件值。 -
当我使用“[String]()”时,此解决方案给我错误“无法将类型 '()' 的值分配给类型 '[String]”我添加了“addEventToCalender”代码。
标签: ios arrays swift uitableview eventkit