FSCalendar - 从选定的日期创建 segue 到另一个视图控制器
FSCalendar - create segue from day selected to another view controller
我是编写 iOS 应用程序的初学者,目前正在使用 FSCalendar 开发日历应用程序。每当我在 FSCalendar 上点击选定的日期(以显示有关选定日期的事件的详细信息)时,我希望我的应用程序转到下一个视图控制器,但我找不到创建从选定日期连接的 segue 的方法到视图控制器。
如果在这种情况下 segue 是可行的方法,我该怎么做?但如果 segue 不是这样做的方法,请提供一些其他可能解决方案的建议。提前致谢!
FSCalendar 有一个“select 日期”委托函数。如果您正在查看 Swift 故事板示例,它会被调用并将格式化日期打印到调试控制台。那是你可以触发你的 segue 的地方。
首先添加一个“详细信息”视图控制器class:
//
// DetailViewController.swift
// FSCalendarSwiftExample
//
// Created by Don Mag on 8/31/20.
//
import UIKit
class DetailViewController: UIViewController {
var selectedDate: Date?
@IBOutlet var myLabel: UILabel!
fileprivate let formatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd"
return formatter
}()
override func viewDidLoad() {
super.viewDidLoad()
if let d = selectedDate {
myLabel.text = formatter.string(from: d)
}
}
}
使用几个标签将视图控制器添加到故事板,将其 class 设置为 DetailViewController
,并将“详细信息标签”连接到 myLabel
@IBOutlet
:
Ctrl-Drag 从 FSCalendar 视图控制器顶部的视图控制器图标到新的详细信息视图控制器,以及 select Show
从弹出菜单:
您会看到添加了 segue
。 Select segue 并给它一个标识符“gotoDetail”:
在InterfaceBuilderViewController
class中找到这个函数:
func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {
print("calendar did select date \(self.formatter.string(from: date))")
if monthPosition == .previous || monthPosition == .next {
calendar.setCurrentPage(date, animated: true)
}
}
并在末尾添加performSegue
行:
func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {
print("calendar did select date \(self.formatter.string(from: date))")
if monthPosition == .previous || monthPosition == .next {
calendar.setCurrentPage(date, animated: true)
}
// add this line
self.performSegue(withIdentifier: "gotoDetail", sender: nil)
}
还是在InterfaceBuilderViewController
class中,找到prepare(for segue...
函数:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let config = segue.destination as? CalendarConfigViewController {
config.lunar = self.lunar
config.theme = self.theme
config.selectedDate = self.calendar.selectedDate
config.firstWeekday = self.calendar.firstWeekday
config.scrollDirection = self.calendar.scrollDirection
}
}
并在末尾添加此代码:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let config = segue.destination as? CalendarConfigViewController {
config.lunar = self.lunar
config.theme = self.theme
config.selectedDate = self.calendar.selectedDate
config.firstWeekday = self.calendar.firstWeekday
config.scrollDirection = self.calendar.scrollDirection
}
// add this code
if let detail = segue.destination as? DetailViewController {
detail.selectedDate = calendar.selectedDate
}
}
运行 应用程序,select Interface Builder
来自 table 视图,select 日期。你的新 Detail 控制器应该被推入视图,它应该显示你的 selected 日期。
我是编写 iOS 应用程序的初学者,目前正在使用 FSCalendar 开发日历应用程序。每当我在 FSCalendar 上点击选定的日期(以显示有关选定日期的事件的详细信息)时,我希望我的应用程序转到下一个视图控制器,但我找不到创建从选定日期连接的 segue 的方法到视图控制器。
如果在这种情况下 segue 是可行的方法,我该怎么做?但如果 segue 不是这样做的方法,请提供一些其他可能解决方案的建议。提前致谢!
FSCalendar 有一个“select 日期”委托函数。如果您正在查看 Swift 故事板示例,它会被调用并将格式化日期打印到调试控制台。那是你可以触发你的 segue 的地方。
首先添加一个“详细信息”视图控制器class:
//
// DetailViewController.swift
// FSCalendarSwiftExample
//
// Created by Don Mag on 8/31/20.
//
import UIKit
class DetailViewController: UIViewController {
var selectedDate: Date?
@IBOutlet var myLabel: UILabel!
fileprivate let formatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd"
return formatter
}()
override func viewDidLoad() {
super.viewDidLoad()
if let d = selectedDate {
myLabel.text = formatter.string(from: d)
}
}
}
使用几个标签将视图控制器添加到故事板,将其 class 设置为 DetailViewController
,并将“详细信息标签”连接到 myLabel
@IBOutlet
:
Ctrl-Drag 从 FSCalendar 视图控制器顶部的视图控制器图标到新的详细信息视图控制器,以及 select Show
从弹出菜单:
您会看到添加了 segue
。 Select segue 并给它一个标识符“gotoDetail”:
在InterfaceBuilderViewController
class中找到这个函数:
func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {
print("calendar did select date \(self.formatter.string(from: date))")
if monthPosition == .previous || monthPosition == .next {
calendar.setCurrentPage(date, animated: true)
}
}
并在末尾添加performSegue
行:
func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {
print("calendar did select date \(self.formatter.string(from: date))")
if monthPosition == .previous || monthPosition == .next {
calendar.setCurrentPage(date, animated: true)
}
// add this line
self.performSegue(withIdentifier: "gotoDetail", sender: nil)
}
还是在InterfaceBuilderViewController
class中,找到prepare(for segue...
函数:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let config = segue.destination as? CalendarConfigViewController {
config.lunar = self.lunar
config.theme = self.theme
config.selectedDate = self.calendar.selectedDate
config.firstWeekday = self.calendar.firstWeekday
config.scrollDirection = self.calendar.scrollDirection
}
}
并在末尾添加此代码:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let config = segue.destination as? CalendarConfigViewController {
config.lunar = self.lunar
config.theme = self.theme
config.selectedDate = self.calendar.selectedDate
config.firstWeekday = self.calendar.firstWeekday
config.scrollDirection = self.calendar.scrollDirection
}
// add this code
if let detail = segue.destination as? DetailViewController {
detail.selectedDate = calendar.selectedDate
}
}
运行 应用程序,select Interface Builder
来自 table 视图,select 日期。你的新 Detail 控制器应该被推入视图,它应该显示你的 selected 日期。