mirror of
https://github.com/SoPat712/YTLitePlus.git
synced 2025-10-30 04:20:37 -04:00
added files via upload
This commit is contained in:
146
Tweaks/FLEX/Core/FLEXTableViewSection.h
Normal file
146
Tweaks/FLEX/Core/FLEXTableViewSection.h
Normal file
@@ -0,0 +1,146 @@
|
||||
//
|
||||
// FLEXTableViewSection.h
|
||||
// FLEX
|
||||
//
|
||||
// Created by Tanner on 1/29/20.
|
||||
// Copyright © 2020 FLEX Team. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "NSArray+FLEX.h"
|
||||
@class FLEXTableView;
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
#pragma mark FLEXTableViewSection
|
||||
|
||||
/// An abstract base class for table view sections.
|
||||
///
|
||||
/// Many properties or methods here return nil or some logical equivalent by default.
|
||||
/// Even so, most of the methods with defaults are intended to be overriden by subclasses.
|
||||
/// Some methods are not implemented at all and MUST be implemented by a subclass.
|
||||
@interface FLEXTableViewSection : NSObject {
|
||||
@protected
|
||||
/// Unused by default, use if you want
|
||||
NSString *_title;
|
||||
|
||||
@private
|
||||
__weak UITableView *_tableView;
|
||||
NSInteger _sectionIndex;
|
||||
}
|
||||
|
||||
#pragma mark - Data
|
||||
|
||||
/// A title to be displayed for the custom section.
|
||||
/// Subclasses may override or use the \c _title ivar.
|
||||
@property (nonatomic, readonly, nullable, copy) NSString *title;
|
||||
/// The number of rows in this section. Subclasses must override.
|
||||
/// This should not change until \c filterText is changed or \c reloadData is called.
|
||||
@property (nonatomic, readonly) NSInteger numberOfRows;
|
||||
/// A map of reuse identifiers to \c UITableViewCell (sub)class objects.
|
||||
/// Subclasses \e may override this as necessary, but are not required to.
|
||||
/// See \c FLEXTableView.h for more information.
|
||||
/// @return nil by default.
|
||||
@property (nonatomic, readonly, nullable) NSDictionary<NSString *, Class> *cellRegistrationMapping;
|
||||
|
||||
/// The section should filter itself based on the contents of this property
|
||||
/// as it is set. If it is set to nil or an empty string, it should not filter.
|
||||
/// Subclasses should override or observe this property and react to changes.
|
||||
///
|
||||
/// It is common practice to use two arrays for the underlying model:
|
||||
/// One to hold all rows, and one to hold unfiltered rows. When \c setFilterText:
|
||||
/// is called, call \c super to store the new value, and re-filter your model accordingly.
|
||||
@property (nonatomic, nullable) NSString *filterText;
|
||||
|
||||
/// Provides an avenue for the section to refresh data or change the number of rows.
|
||||
///
|
||||
/// This is called before reloading the table view itself. If your section pulls data
|
||||
/// from an external data source, this is a good place to refresh that data entirely.
|
||||
/// If your section does not, then it might be simpler for you to just override
|
||||
/// \c setFilterText: to call \c super and call \c reloadData.
|
||||
- (void)reloadData;
|
||||
|
||||
/// Like \c reloadData, but optionally reloads the table view section
|
||||
/// associated with this section object, if any. Do not override.
|
||||
/// Do not call outside of the main thread.
|
||||
- (void)reloadData:(BOOL)updateTable;
|
||||
|
||||
/// Provide a table view and section index to allow the section to efficiently reload
|
||||
/// its own section of the table when something changes it. The table reference is
|
||||
/// held weakly, and subclasses cannot access it or the index. Call this method again
|
||||
/// if the section numbers have changed since you last called it.
|
||||
- (void)setTable:(UITableView *)tableView section:(NSInteger)index;
|
||||
|
||||
#pragma mark - Row Selection
|
||||
|
||||
/// Whether the given row should be selectable, such as if tapping the cell
|
||||
/// should take the user to a new screen or trigger an action.
|
||||
/// Subclasses \e may override this as necessary, but are not required to.
|
||||
/// @return \c NO by default
|
||||
- (BOOL)canSelectRow:(NSInteger)row;
|
||||
|
||||
/// An action "future" to be triggered when the row is selected, if the row
|
||||
/// supports being selected as indicated by \c canSelectRow:. Subclasses
|
||||
/// must implement this in accordance with how they implement \c canSelectRow:
|
||||
/// if they do not implement \c viewControllerToPushForRow:
|
||||
/// @return This returns \c nil if no view controller is provided by
|
||||
/// \c viewControllerToPushForRow: — otherwise it pushes that view controller
|
||||
/// onto \c host.navigationController
|
||||
- (nullable void(^)(__kindof UIViewController *host))didSelectRowAction:(NSInteger)row;
|
||||
|
||||
/// A view controller to display when the row is selected, if the row
|
||||
/// supports being selected as indicated by \c canSelectRow:. Subclasses
|
||||
/// must implement this in accordance with how they implement \c canSelectRow:
|
||||
/// if they do not implement \c didSelectRowAction:
|
||||
/// @return \c nil by default
|
||||
- (nullable UIViewController *)viewControllerToPushForRow:(NSInteger)row;
|
||||
|
||||
/// Called when the accessory view's detail button is pressed.
|
||||
/// @return \c nil by default.
|
||||
- (nullable void(^)(__kindof UIViewController *host))didPressInfoButtonAction:(NSInteger)row;
|
||||
|
||||
#pragma mark - Context Menus
|
||||
|
||||
/// By default, this is the title of the row.
|
||||
/// @return The title of the context menu, if any.
|
||||
- (nullable NSString *)menuTitleForRow:(NSInteger)row API_AVAILABLE(ios(13.0));
|
||||
/// Protected, not intended for public use. \c menuTitleForRow:
|
||||
/// already includes the value returned from this method.
|
||||
///
|
||||
/// By default, this returns \c @"". Subclasses may override to
|
||||
/// provide a detailed description of the target of the context menu.
|
||||
- (NSString *)menuSubtitleForRow:(NSInteger)row API_AVAILABLE(ios(13.0));
|
||||
/// The context menu items, if any. Subclasses may override.
|
||||
/// By default, only inludes items for \c copyMenuItemsForRow:.
|
||||
- (nullable NSArray<UIMenuElement *> *)menuItemsForRow:(NSInteger)row sender:(UIViewController *)sender API_AVAILABLE(ios(13.0));
|
||||
/// Subclasses may override to return a list of copiable items.
|
||||
///
|
||||
/// Every two elements in the list compose a key-value pair, where the key
|
||||
/// should be a description of what will be copied, and the values should be
|
||||
/// the strings to copy. Return an empty string as a value to show a disabled action.
|
||||
- (nullable NSArray<NSString *> *)copyMenuItemsForRow:(NSInteger)row API_AVAILABLE(ios(13.0));
|
||||
|
||||
#pragma mark - Cell Configuration
|
||||
|
||||
/// Provide a reuse identifier for the given row. Subclasses should override.
|
||||
///
|
||||
/// Custom reuse identifiers should be specified in \c cellRegistrationMapping.
|
||||
/// You may return any of the identifiers in \c FLEXTableView.h
|
||||
/// without including them in the \c cellRegistrationMapping.
|
||||
/// @return \c kFLEXDefaultCell by default.
|
||||
- (NSString *)reuseIdentifierForRow:(NSInteger)row;
|
||||
/// Configure a cell for the given row. Subclasses must override.
|
||||
- (void)configureCell:(__kindof UITableViewCell *)cell forRow:(NSInteger)row;
|
||||
|
||||
#pragma mark - External Convenience
|
||||
|
||||
/// For use by whatever view controller uses your section. Not required.
|
||||
/// @return An optional title.
|
||||
- (nullable NSString *)titleForRow:(NSInteger)row;
|
||||
/// For use by whatever view controller uses your section. Not required.
|
||||
/// @return An optional subtitle.
|
||||
- (nullable NSString *)subtitleForRow:(NSInteger)row;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
Reference in New Issue
Block a user