Classes
The following classes are available globally.
-
This is the original app delegate part of the app (starting point). We are actually using Scene Delegate, but this is a good place to use as a “fulcrum.”
See moreDeclaration
Swift
@main class VMF_AppDelegate : UIResponder
extension VMF_AppDelegate: UIApplicationDelegate
-
This class has the Scene Delegate functionality.
See moreDeclaration
Swift
class VMF_SceneDelegate : UIResponder, UIWindowSceneDelegate
-
This allows single taps, or hold to repeat (like steppers).
See moreDeclaration
Swift
class VMF_TapHoldButton : UIControl
-
This is a special button that has a string and a URL. This class lets us define them in IB.
See moreDeclaration
Swift
class VMF_URLButton : UIButton
-
This is the page controller that embeds our tables.
Declaration
Swift
class VMF_DayTimeSearchPageViewController : UIPageViewController
-
This handles the marker annotation for the main center.
See moreDeclaration
Swift
class VMF_MapAnnotation : NSObject, MKAnnotation
-
This handles our map marker.
See moreDeclaration
Swift
class VMF_MapMarker : MKAnnotationView
-
This stores our various parameters.
See moreDeclaration
Swift
class VMF_Persistent_Prefs : RVS_PersistentPrefs
-
The base class for all our view controllers.
See moreDeclaration
Swift
class VMF_BaseViewController : UIViewController
-
This provides one table cell for the main table of meetings.
See moreDeclaration
Swift
class VMF_TableCell : UITableViewCell
-
This presents a simple view controller, with a table of meetings.
See moreDeclaration
Swift
class VMF_EmbeddedTableController : VMF_BaseViewController, VMF_EmbeddedTableControllerProtocol
extension VMF_EmbeddedTableController: UITableViewDataSource
extension VMF_EmbeddedTableController: UITableViewDelegate
-
This displays the About screen.
See moreDeclaration
Swift
class VMF_AboutViewController : VMF_BaseViewController
-
This is the main view controller for the My Attendance Screen.
This is a very basic table display. It does not have any controls or filters.
See moreDeclaration
Swift
class VMF_AttendanceViewController : VMF_BaseViewController, VMF_MasterTableControllerProtocol
-
This is the main view controller for the weekday/time selector tab.
QUICK OVERVIEW
The way that the data is set up, we have “day indexes (1-7), and "time slots” (varies, per day).
All times are mapped to the user’s local timezone, regardless of the start time in the meeting’s “native” timezone.
The instance of this class will have a
VMF_DayTimeSearchPageViewController
embedded (also theVMF_AttendanceViewController
class, but that one disables the page view controller), which allows the user to swipe-select pages of meetings.DAY INDEXES
These represent 0 (In Progress), 1 (Sunday), through 7 (Saturday), or 8 (Search Mode).
Mode 0 (In Progress)
In this mode, there is no “time index,” and the screen displays all meetings that are in progress, regardless of when they started.
Mode 1 -> 7
If the day index is 1 -> 7, the screen displays whatever time index, within that day, is selected.
The day index is stored in Sunday -> Saturday (the database native scheme), but are mapped to the local week, upon display.
Mode 8 (Search)
In this mode, the day index and time index are irrelevant. All possible meetings are displayed, then are filtered, “live,” as text is entered into the text entry field.
TIME INDEXES
Each day has “time slots.” These are groupings of times, where meetings start (1 or more). Each “time slot” is a separate group of meetings that all begin at the same time.
In regular weekdays (day index 1 -> 7), only one “time slot” is shown at a time. Only the meetings that begin at the same time are shown.
If possible, the user’s currently selected time index is honored, and we try to match the time, when changing selected days. It is also preserved, when entering Mode 0 or Mode 8.
SELECTING FOR ATTENDANCE
It is possible for a user to indicate that they attend a meeting, by double-tapping on a meeting in the list, or by selecting “I Attend,” in the meeting inspector screen.
You can bring in a separate screen, that contains only the meetings that you attend. This is accessed from the chackmark bar button item, in the upper right.
See moreDeclaration
Swift
class VMF_MainViewController : VMF_BaseViewController, VMF_MasterTableControllerProtocol
extension VMF_MainViewController: UIPageViewControllerDataSource
extension VMF_MainViewController: UIPageViewControllerDelegate
extension VMF_MainViewController: UIPickerViewDataSource
extension VMF_MainViewController: UIPickerViewDelegate
-
This displays one meeting.
See moreDeclaration
Swift
class VMF_MeetingInspectorViewController : VMF_BaseViewController
extension VMF_MeetingInspectorViewController: MKMapViewDelegate
-
This displays the settings screen.
NOTE: You will see a double-tap gesture recognizer in the IB file.
This “eats” double-taps. It prevents the switch from doing an “about face,” if the user is too fast.
The single-tap gesture recognizer does the same thing, but is the principal trigger.
We use gesture recognizers, instead of controls. Messes with the accessibility a bit, but the delay in responding, means that the user can accidentally trigger multiple switches.
See moreDeclaration
Swift
class VMF_SettingsViewController : VMF_BaseViewController