mirror of
https://github.com/SoPat712/YTLitePlus.git
synced 2025-10-29 12:00:47 -04:00
154 lines
6.5 KiB
Objective-C
154 lines
6.5 KiB
Objective-C
//
|
|
// FLEXTableViewController.h
|
|
// FLEX
|
|
//
|
|
// Created by Tanner on 7/5/19.
|
|
// Copyright © 2020 FLEX Team. All rights reserved.
|
|
//
|
|
|
|
#import <UIKit/UIKit.h>
|
|
#import "FLEXTableView.h"
|
|
@class FLEXScopeCarousel, FLEXWindow, FLEXTableViewSection;
|
|
|
|
typedef CGFloat FLEXDebounceInterval;
|
|
/// No delay, all events delivered
|
|
extern CGFloat const kFLEXDebounceInstant;
|
|
/// Small delay which makes UI seem smoother by avoiding rapid events
|
|
extern CGFloat const kFLEXDebounceFast;
|
|
/// Slower than Fast, faster than ExpensiveIO
|
|
extern CGFloat const kFLEXDebounceForAsyncSearch;
|
|
/// The least frequent, at just over once per second; for I/O or other expensive operations
|
|
extern CGFloat const kFLEXDebounceForExpensiveIO;
|
|
|
|
@protocol FLEXSearchResultsUpdating <NSObject>
|
|
/// A method to handle search query update events.
|
|
///
|
|
/// \c searchBarDebounceInterval is used to reduce the frequency at which this
|
|
/// method is called. This method is also called when the search bar becomes
|
|
/// the first responder, and when the selected search bar scope index changes.
|
|
- (void)updateSearchResults:(NSString *)newText;
|
|
@end
|
|
|
|
@interface FLEXTableViewController : UITableViewController <
|
|
UISearchResultsUpdating, UISearchControllerDelegate, UISearchBarDelegate
|
|
>
|
|
|
|
/// A grouped table view. Inset on iOS 13.
|
|
///
|
|
/// Simply calls into \c initWithStyle:
|
|
- (id)init;
|
|
|
|
/// Subclasses may override to configure the controller before \c viewDidLoad:
|
|
- (id)initWithStyle:(UITableViewStyle)style;
|
|
|
|
@property (nonatomic) FLEXTableView *tableView;
|
|
|
|
/// If your subclass conforms to \c FLEXSearchResultsUpdating
|
|
/// then this property is assigned to \c self automatically.
|
|
///
|
|
/// Setting \c filterDelegate will also set this property to that object.
|
|
@property (nonatomic, weak) id<FLEXSearchResultsUpdating> searchDelegate;
|
|
|
|
/// Defaults to NO.
|
|
///
|
|
/// Setting this to YES will initialize the carousel and the view.
|
|
@property (nonatomic) BOOL showsCarousel;
|
|
/// A horizontally scrolling list with functionality similar to
|
|
/// that of a search bar's scope bar. You'd want to use this when
|
|
/// you have potentially more than 4 scope options.
|
|
@property (nonatomic) FLEXScopeCarousel *carousel;
|
|
|
|
/// Defaults to NO.
|
|
///
|
|
/// Setting this to YES will initialize searchController and the view.
|
|
@property (nonatomic) BOOL showsSearchBar;
|
|
/// Defaults to NO.
|
|
///
|
|
/// Setting this to YES will make the search bar appear whenever the view appears.
|
|
/// Otherwise, iOS will only show the search bar when you scroll up.
|
|
@property (nonatomic) BOOL showSearchBarInitially;
|
|
/// Defaults to NO.
|
|
///
|
|
/// Setting this to YES will make the search bar activate whenever the view appears.
|
|
@property (nonatomic) BOOL activatesSearchBarAutomatically;
|
|
|
|
/// nil unless showsSearchBar is set to YES.
|
|
///
|
|
/// self is used as the default search results updater and delegate.
|
|
/// The search bar will not dim the background or hide the navigation bar by default.
|
|
/// On iOS 11 and up, the search bar will appear in the navigation bar below the title.
|
|
@property (nonatomic) UISearchController *searchController;
|
|
/// Used to initialize the search controller. Defaults to nil.
|
|
@property (nonatomic) UIViewController *searchResultsController;
|
|
/// Defaults to "Fast"
|
|
///
|
|
/// Determines how often search bar results will be "debounced."
|
|
/// Empty query events are always sent instantly. Query events will
|
|
/// be sent when the user has not changed the query for this interval.
|
|
@property (nonatomic) FLEXDebounceInterval searchBarDebounceInterval;
|
|
/// Whether the search bar stays at the top of the view while scrolling.
|
|
///
|
|
/// Calls into self.navigationItem.hidesSearchBarWhenScrolling.
|
|
/// Do not change self.navigationItem.hidesSearchBarWhenScrolling directly,
|
|
/// or it will not be respsected. Use this instead.
|
|
/// Defaults to NO.
|
|
@property (nonatomic) BOOL pinSearchBar;
|
|
/// By default, we will show the search bar's cancel button when
|
|
/// search becomes active and hide it when search is dismissed.
|
|
///
|
|
/// Do not set the showsCancelButton property on the searchController's
|
|
/// searchBar manually. Set this property after turning on showsSearchBar.
|
|
///
|
|
/// Does nothing pre-iOS 13, safe to call on any version.
|
|
@property (nonatomic) BOOL automaticallyShowsSearchBarCancelButton;
|
|
|
|
/// If using the scope bar, self.searchController.searchBar.selectedScopeButtonIndex.
|
|
/// Otherwise, this is the selected index of the carousel, or NSNotFound if using neither.
|
|
@property (nonatomic) NSInteger selectedScope;
|
|
/// self.searchController.searchBar.text
|
|
@property (nonatomic, readonly, copy) NSString *searchText;
|
|
|
|
/// A totally optional delegate to forward search results updater calls to.
|
|
/// If a delegate is set, updateSearchResults: is not called on this view controller.
|
|
@property (nonatomic, weak) id<FLEXSearchResultsUpdating> searchResultsUpdater;
|
|
|
|
/// self.view.window as a \c FLEXWindow
|
|
@property (nonatomic, readonly) FLEXWindow *window;
|
|
|
|
/// Convenient for doing some async processor-intensive searching
|
|
/// in the background before updating the UI back on the main queue.
|
|
- (void)onBackgroundQueue:(NSArray *(^)(void))backgroundBlock thenOnMainQueue:(void(^)(NSArray *))mainBlock;
|
|
|
|
/// Adds up to 3 additional items to the toolbar in right-to-left order.
|
|
///
|
|
/// That is, the first item in the given array will be the rightmost item behind
|
|
/// any existing toolbar items. By default, buttons for bookmarks and tabs are shown.
|
|
///
|
|
/// If you wish to have more control over how the buttons are arranged or which
|
|
/// buttons are displayed, you can access the properties for the pre-existing
|
|
/// toolbar items directly and manually set \c self.toolbarItems by overriding
|
|
/// the \c setupToolbarItems method below.
|
|
- (void)addToolbarItems:(NSArray<UIBarButtonItem *> *)items;
|
|
|
|
/// Subclasses may override. You should not need to call this method directly.
|
|
- (void)setupToolbarItems;
|
|
|
|
@property (nonatomic, readonly) UIBarButtonItem *shareToolbarItem;
|
|
@property (nonatomic, readonly) UIBarButtonItem *bookmarksToolbarItem;
|
|
@property (nonatomic, readonly) UIBarButtonItem *openTabsToolbarItem;
|
|
|
|
/// Whether or not to display the "share" icon in the middle of the toolbar. NO by default.
|
|
///
|
|
/// Turning this on after you have added custom toolbar items will
|
|
/// push off the leftmost toolbar item and shift the others leftward.
|
|
@property (nonatomic) BOOL showsShareToolbarItem;
|
|
/// Called when the share button is pressed.
|
|
/// Default implementation does nothign. Subclasses may override.
|
|
- (void)shareButtonPressed:(UIBarButtonItem *)sender;
|
|
|
|
/// Subclasses may call this to opt-out of all toolbar related behavior.
|
|
/// This is necessary if you want to disable the gesture which reveals the toolbar.
|
|
- (void)disableToolbar;
|
|
|
|
@end
|