• iOS开发UIResponder简介API


    #import <Foundation/Foundation.h>
    #import <UIKit/UIKitDefines.h>
    #import <UIKit/UIEvent.h>
    #import <UIKit/UIPasteConfigurationSupporting.h>
    
    NS_ASSUME_NONNULL_BEGIN
    
    @class UIPress;
    @class UIPressesEvent;
    //响应者类的按键命令类类目
    @protocol UIResponderStandardEditActions <NSObject>
    @optional
    - (void)cut:(nullable id)sender NS_AVAILABLE_IOS(3_0);//剪切
    - (void)copy:(nullable id)sender NS_AVAILABLE_IOS(3_0);//复制
    - (void)paste:(nullable id)sender NS_AVAILABLE_IOS(3_0);//粘贴
    - (void)select:(nullable id)sender NS_AVAILABLE_IOS(3_0);//选择
    - (void)selectAll:(nullable id)sender NS_AVAILABLE_IOS(3_0);//选择全部
    - (void)delete:(nullable id)sender NS_AVAILABLE_IOS(3_2);//删除
    - (void)makeTextWritingDirectionLeftToRight:(nullable id)sender NS_AVAILABLE_IOS(5_0);//从左到右写入字符串
    - (void)makeTextWritingDirectionRightToLeft:(nullable id)sender NS_AVAILABLE_IOS(5_0);//从右到左写入字符串
    - (void)toggleBoldface:(nullable id)sender NS_AVAILABLE_IOS(6_0);//切换字体为黑体
    - (void)toggleItalics:(nullable id)sender NS_AVAILABLE_IOS(6_0);//切换字体为斜体
    - (void)toggleUnderline:(nullable id)sender NS_AVAILABLE_IOS(6_0);//为字体加入下划线
    
    - (void)increaseSize:(nullable id)sender NS_AVAILABLE_IOS(7_0);//增加字体大小
    - (void)decreaseSize:(nullable id)sender NS_AVAILABLE_IOS(7_0);//减小字体大小
    
    @end
    
    NS_CLASS_AVAILABLE_IOS(2_0) @interface UIResponder : NSObject <UIResponderStandardEditActions>
    //响应链中负责传递事件的方法
    #if UIKIT_DEFINE_AS_PROPERTIES
    @property(nonatomic, readonly, nullable) UIResponder *nextResponder;
    #else
    - (nullable UIResponder*)nextResponder;
    #endif
    
    //一个响应对象是否可以成为第一响应者,可以用这个进行判断,默认值为NO
    #if UIKIT_DEFINE_AS_PROPERTIES
    @property(nonatomic, readonly) BOOL canBecomeFirstResponder;    // default is NO
    #else
    - (BOOL)canBecomeFirstResponder;    // default is NO
    #endif
    //设置对象成为第一响应者,成功返回YES;否则返回NO
    - (BOOL)becomeFirstResponder;
    
    //是否可以辞去第一响应者,默认值为YES
    #if UIKIT_DEFINE_AS_PROPERTIES
    @property(nonatomic, readonly) BOOL canResignFirstResponder;    // default is YES
    #else
    - (BOOL)canResignFirstResponder;    // default is YES
    #endif
    //辞去第一响应者 成功返回YES;否则返回NO
    - (BOOL)resignFirstResponder;
    
    //判定一个响应对象是否是第一响应者
    #if UIKIT_DEFINE_AS_PROPERTIES
    @property(nonatomic, readonly) BOOL isFirstResponder;
    #else
    - (BOOL)isFirstResponder;
    #endif
    
    //响应触摸事件
    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;//手指按下的时候调用
    - (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;//手指移动的时候调用
    - (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;//手指抬起的时候调用
    - (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;//取消(非正常离开屏幕,意外中断)
    - (void)touchesEstimatedPropertiesUpdated:(NSSet<UITouch *> *)touches NS_AVAILABLE_IOS(9_1);// Apple Pencil 产生的 touch 事件的部分信息(如 Pencil 的方向等)传递到 iPad 或 iPhone 上会有一定的延时。
    //UIKit 的回调方法 touchBegan 是立即产生的,其返回的参数 touch 中包含了 Pencil 产生的额外信息,这个额外信息是有延时的。所以,首次回调时会给出额外信息的预估值,延时获取真实值之后会调用 touchesEstimatedPropertiesUpdated 方法更新额外信息。
    
    //物理按钮 深按API,一般用于遥控器
    - (void)pressesBegan:(NSSet<UIPress *> *)presses withEvent:(nullable UIPressesEvent *)event NS_AVAILABLE_IOS(9_0);// 开始按压的时候调用
    - (void)pressesChanged:(NSSet<UIPress *> *)presses withEvent:(nullable UIPressesEvent *)event NS_AVAILABLE_IOS(9_0);// 按压改变的时候调用
    - (void)pressesEnded:(NSSet<UIPress *> *)presses withEvent:(nullable UIPressesEvent *)event NS_AVAILABLE_IOS(9_0);// 按压结束的时候调用
    - (void)pressesCancelled:(NSSet<UIPress *> *)presses withEvent:(nullable UIPressesEvent *)event NS_AVAILABLE_IOS(9_0);// 当系统发出取消按压事件的时候调用
    
    //响应移动事件
    - (void)motionBegan:(UIEventSubtype)motion withEvent:(nullable UIEvent *)event NS_AVAILABLE_IOS(3_0);//移动事件开始
    - (void)motionEnded:(UIEventSubtype)motion withEvent:(nullable UIEvent *)event NS_AVAILABLE_IOS(3_0);//移动事件结束
    - (void)motionCancelled:(UIEventSubtype)motion withEvent:(nullable UIEvent *)event NS_AVAILABLE_IOS(3_0);//移动事件取消
    
    //响应远程控制事件 一般用于耳机
    - (void)remoteControlReceivedWithEvent:(nullable UIEvent *)event NS_AVAILABLE_IOS(4_0);
    
    //通过这个方法告诉UIMenuController它内部应该显示什么内容,”复制”、”粘贴”等
    - (BOOL)canPerformAction:(SEL)action withSender:(nullable id)sender NS_AVAILABLE_IOS(3_0);
    ////默认的实现是调用canPerformAction:withSender:方法来确定对象是否可以调用action操作。如果我们想要重写目标的选择方式,则应该重写这个方法。
    - (nullable id)targetForAction:(SEL)action withSender:(nullable id)sender NS_AVAILABLE_IOS(7_0);
    
    //UIResponder提供了一个只读方法来获取响应链中共享的undo管理器,公共的事件撤销管理者
    @property(nullable, nonatomic,readonly) NSUndoManager *undoManager NS_AVAILABLE_IOS(3_0);
    
    @end
    
    //定义一个响应者支持的快捷键
    typedef NS_OPTIONS(NSInteger, UIKeyModifierFlags) {
        UIKeyModifierAlphaShift     = 1 << 16,// Alppha+Shift键
        UIKeyModifierShift          = 1 << 17,//Shift键
        UIKeyModifierControl        = 1 << 18,//Control键
        UIKeyModifierAlternate      = 1 << 19,//Alt键
        UIKeyModifierCommand        = 1 << 20,//Command键
        UIKeyModifierNumericPad     = 1 << 21,//Num键
    } NS_ENUM_AVAILABLE_IOS(7_0);
    
    NS_CLASS_AVAILABLE_IOS(7_0) @interface UIKeyCommand : NSObject <NSCopying, NSSecureCoding>
    
    - (instancetype)init NS_DESIGNATED_INITIALIZER;
    - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER;
    //输入字符串
    @property (nullable,nonatomic,readonly) NSString *input;
    //按键调节器
    @property (nonatomic,readonly) UIKeyModifierFlags modifierFlags;
    //按指定调节器键输入字符串并设置事件
    @property (nullable,nonatomic,copy) NSString *discoverabilityTitle NS_AVAILABLE_IOS(9_0);
    
    // The action for UIKeyCommands should accept a single (id)sender, as do the UIResponderStandardEditActions above
    
    // Creates an key command that will _not_ be discoverable in the UI.
    + (UIKeyCommand *)keyCommandWithInput:(NSString *)input modifierFlags:(UIKeyModifierFlags)modifierFlags action:(SEL)action;
    
    // Key Commands with a discoverabilityTitle _will_ be discoverable in the UI.
    + (UIKeyCommand *)keyCommandWithInput:(NSString *)input modifierFlags:(UIKeyModifierFlags)modifierFlags action:(SEL)action discoverabilityTitle:(NSString *)discoverabilityTitle NS_AVAILABLE_IOS(9_0);
    
    @end
    
    @interface UIResponder (UIResponderKeyCommands)
    @property (nullable,nonatomic,readonly) NSArray<UIKeyCommand *> *keyCommands NS_AVAILABLE_IOS(7_0); // returns an array of UIKeyCommand objects<
    @end
    
    @class UIInputViewController;
    @class UITextInputMode;
    @class UITextInputAssistantItem;
    
    @interface UIResponder (UIResponderInputViewAdditions)
    
    //键盘输入视图(系统默认的,可以自定义)
    @property (nullable, nonatomic, readonly, strong) __kindof UIView *inputView NS_AVAILABLE_IOS(3_2);
    //弹出键盘时附带的视图
    @property (nullable, nonatomic, readonly, strong) __kindof UIView *inputAccessoryView NS_AVAILABLE_IOS(3_2);
    
    /// This method is for clients that wish to put buttons on the Shortcuts Bar, shown on top of the keyboard.
    /// You may modify the returned inputAssistantItem to add to or replace the existing items on the bar.
    /// Modifications made to the returned UITextInputAssistantItem are reflected automatically.
    /// This method should not be overriden. Goes up the responder chain.
    @property (nonnull, nonatomic, readonly, strong) UITextInputAssistantItem *inputAssistantItem NS_AVAILABLE_IOS(9_0) __TVOS_PROHIBITED __WATCHOS_PROHIBITED;
    
    //键盘输入视图控制器 IOS8以后
    @property (nullable, nonatomic, readonly, strong) UIInputViewController *inputViewController NS_AVAILABLE_IOS(8_0);
    //弹出键盘时附带的视图的视图控制器 IOS8以后
    @property (nullable, nonatomic, readonly, strong) UIInputViewController *inputAccessoryViewController NS_AVAILABLE_IOS(8_0);
    
    //文本输入模式
    @property (nullable, nonatomic, readonly, strong) UITextInputMode *textInputMode NS_AVAILABLE_IOS(7_0);
    //文本输入模式标识
    @property (nullable, nonatomic, readonly, strong) NSString *textInputContextIdentifier NS_AVAILABLE_IOS(7_0);
    //根据设置的标识清除指定的文本输入模式
    + (void)clearTextInputContextIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(7_0);
    
    //重新刷新键盘输入视图
    - (void)reloadInputViews NS_AVAILABLE_IOS(3_2);
    
    @end
    
    // 按键输入箭头指向
    UIKIT_EXTERN NSString *const UIKeyInputUpArrow         NS_AVAILABLE_IOS(7_0);
    UIKIT_EXTERN NSString *const UIKeyInputDownArrow       NS_AVAILABLE_IOS(7_0);
    UIKIT_EXTERN NSString *const UIKeyInputLeftArrow       NS_AVAILABLE_IOS(7_0);
    UIKIT_EXTERN NSString *const UIKeyInputRightArrow      NS_AVAILABLE_IOS(7_0);
    UIKIT_EXTERN NSString *const UIKeyInputEscape          NS_AVAILABLE_IOS(7_0);
    
    @interface UIResponder (ActivityContinuation)
    //用户活动
    @property (nullable, nonatomic, strong) NSUserActivity *userActivity NS_AVAILABLE_IOS(8_0);
    //更新用户活动
    - (void)updateUserActivityState:(NSUserActivity *)activity NS_AVAILABLE_IOS(8_0);
    //恢复用户活动
    - (void)restoreUserActivityState:(NSUserActivity *)activity NS_AVAILABLE_IOS(8_0);
    @end
    
    #if TARGET_OS_IOS
    @interface UIResponder (UIPasteConfigurationSupporting) <UIPasteConfigurationSupporting>
    @end
    #endif
    
    NS_ASSUME_NONNULL_END
  • 相关阅读:
    201671010135 2016--2017<java程序设计:学习总结>
    201671010135 2016--2017--《java程序设计:图形程序设计》
    201671010135 2016--2017--《java程序设计:第就章存在问题》
    201671010135 2016--2017--《java程序设计:泛型数组设计学习总结》
    201671010135 2016--2017--《java程序设计:第七章 异常,断言和日志》
    2016710101352016-2017-2 《JAVA程序设计》第八周学习总结
    201671010145 赵乾 学习统计
    201671010145 2016-2017 《JAVA程序设计》Java线程:线程的同步-同步方法
    201671010145 2016-2017《Java程序设计》Java中进程与线程的区别
    201671010145 2016-2017《Java程序设计》 如何进行JAVA项目打包部署?
  • 原文地址:https://www.cnblogs.com/xianfeng-zhang/p/9466257.html
Copyright © 2020-2023  润新知