// // FLEXRuntime+UIKitHelpers.h // FLEX // // Created by Tanner Bennett on 12/16/19. // Copyright © 2020 FLEX Team. All rights reserved. // #import #import "FLEXProperty.h" #import "FLEXIvar.h" #import "FLEXMethod.h" #import "FLEXProtocol.h" #import "FLEXTableViewSection.h" @class FLEXObjectExplorerDefaults; /// Model objects of an object explorer screen adopt this /// protocol in order respond to user defaults changes @protocol FLEXObjectExplorerItem /// Current explorer settings. Set when settings change. @property (nonatomic) FLEXObjectExplorerDefaults *defaults; /// YES for properties and ivars which surely support editing, NO for all methods. @property (nonatomic, readonly) BOOL isEditable; /// NO for ivars, YES for supported methods and properties @property (nonatomic, readonly) BOOL isCallable; @end @protocol FLEXRuntimeMetadata /// Used as the main title of the row - (NSString *)description; /// Used to compare metadata objects for uniqueness @property (nonatomic, readonly) NSString *name; /// For internal use @property (nonatomic) id tag; /// Should return \c nil if not applicable - (id)currentValueWithTarget:(id)object; /// Used as the subtitle or description of a property, ivar, or method - (NSString *)previewWithTarget:(id)object; /// For methods, a method calling screen. For all else, an object explorer. - (UIViewController *)viewerWithTarget:(id)object; /// For methods and protocols, nil. For all else, an a field editor screen. /// The given section is reloaded on commit of any changes. - (UIViewController *)editorWithTarget:(id)object section:(FLEXTableViewSection *)section; /// Used to determine present which interactions are possible to the user - (UITableViewCellAccessoryType)suggestedAccessoryTypeWithTarget:(id)object; /// Return nil to use the default reuse identifier - (NSString *)reuseIdentifierWithTarget:(id)object; /// An array of actions to place in the first section of the context menu. - (NSArray *)additionalActionsWithTarget:(id)object sender:(UIViewController *)sender API_AVAILABLE(ios(13.0)); /// An array where every 2 elements are a key-value pair. The key is a description /// of what to copy like "Name" and the values are what will be copied. - (NSArray *)copiableMetadataWithTarget:(id)object; /// Properties and ivars return the address of an object, if they hold one. - (NSString *)contextualSubtitleWithTarget:(id)object; @end // Even if a property is readonly, it still may be editable // via a setter. Checking isEditable will not reflect that // unless the property was initialized with a class. @interface FLEXProperty (UIKitHelpers) @end @interface FLEXIvar (UIKitHelpers) @end @interface FLEXMethodBase (UIKitHelpers) @end @interface FLEXMethod (UIKitHelpers) @end @interface FLEXProtocol (UIKitHelpers) @end typedef NS_ENUM(NSUInteger, FLEXStaticMetadataRowStyle) { FLEXStaticMetadataRowStyleSubtitle, FLEXStaticMetadataRowStyleKeyValue, FLEXStaticMetadataRowStyleDefault = FLEXStaticMetadataRowStyleSubtitle, }; /// Displays a small row as a static key-value pair of information. @interface FLEXStaticMetadata : NSObject + (instancetype)style:(FLEXStaticMetadataRowStyle)style title:(NSString *)title string:(NSString *)string; + (instancetype)style:(FLEXStaticMetadataRowStyle)style title:(NSString *)title number:(NSNumber *)number; + (NSArray *)classHierarchy:(NSArray *)classes; @end /// This is assigned to the \c tag property of each metadata.