Skip to content

UIKit iOS xcode14.0 beta4

Manuel de la Pena edited this page Aug 18, 2022 · 3 revisions

#UIKit.framework https://github.com/xamarin/xamarin-macios/pull/15694

diff -ruN /Applications/Xcode_14.0.0-beta3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/NSTextListElement.h /Applications/Xcode_14.0.0-beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/NSTextListElement.h
--- /Applications/Xcode_14.0.0-beta3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/NSTextListElement.h	2022-06-30 22:10:53.000000000 -0400
+++ /Applications/Xcode_14.0.0-beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/NSTextListElement.h	2022-07-25 15:37:08.000000000 -0400
@@ -20,15 +20,15 @@
 @interface NSTextListElement : NSTextParagraph
 #pragma mark Initializer
 // Designated initializer. Initializes 2 types of NSTextListElement: a standard list item and nesting parent element. Either of contents, markerAttributes, or childElements must be non-nil. Clients should typically use one of 2 factory methods below for instantiating with a specific type. When markerAttributes!=nil, it will be used to format the marker; otherwise, it is derived from contents.
-- (instancetype)initWithParentElement:(nullable NSTextListElement *)parentElement textList:(NSTextList *)textList contents:(nullable NSAttributedString *)contents markerAttributes:(nullable NSDictionary<NSAttributedStringKey, id> *)markerAttributes childElements:(nullable NSArray<NSTextListElement *> *)childElements NS_DESIGNATED_INITIALIZER;
+- (instancetype)initWithParentElement:(nullable NSTextListElement *)parent textList:(NSTextList *)textList contents:(nullable NSAttributedString *)contents markerAttributes:(nullable NSDictionary<NSAttributedStringKey, id> *)markerAttributes childElements:(nullable NSArray<NSTextListElement *> *)children NS_DESIGNATED_INITIALIZER;
 
 - (instancetype)initWithAttributedString:(nullable NSAttributedString *)attributedString NS_UNAVAILABLE;
 
 // Instantiates a standard text list.
-+ (instancetype)textListElementWithContents:(NSAttributedString *)contents markerAttributes:(nullable NSDictionary<NSAttributedStringKey, id> *)markerAttributes textList:(NSTextList *)textList childElements:(nullable NSArray<NSTextListElement *> *)childElements;
++ (instancetype)textListElementWithContents:(NSAttributedString *)contents markerAttributes:(nullable NSDictionary<NSAttributedStringKey, id> *)markerAttributes textList:(NSTextList *)textList childElements:(nullable NSArray<NSTextListElement *> *)children;
 
 // Returns an instance with childElements without contents. Returns nil if childElements.count == 0. nestingLevel specifies the number of shifts represented by the tree elements returned. Raises an exception when nestingLevel < 0. textList specifies NSTextList used by the new instance.
-+ (nullable instancetype)textListElementWithChildElements:(NSArray<NSTextListElement *> *)childElements textList:(NSTextList *)textList nestingLevel:(NSInteger)nestingLevel;
++ (nullable instancetype)textListElementWithChildElements:(NSArray<NSTextListElement *> *)children textList:(NSTextList *)textList nestingLevel:(NSInteger)nestingLevel;
 
 #pragma mark Properties
 @property (readonly, strong) NSTextList *textList;
diff -ruN /Applications/Xcode_14.0.0-beta3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIBarButtonItem.h /Applications/Xcode_14.0.0-beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIBarButtonItem.h
--- /Applications/Xcode_14.0.0-beta3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIBarButtonItem.h	2022-06-30 09:29:40.000000000 -0400
+++ /Applications/Xcode_14.0.0-beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIBarButtonItem.h	2022-07-22 10:04:34.000000000 -0400
@@ -76,9 +76,18 @@
 /// Creates a plain-style bar button item with the given title. The constructed item will present the menu immediately when touched.
 - (instancetype)initWithTitle:(nullable NSString *)title menu:(nullable UIMenu *)menu API_AVAILABLE(ios(14.0));
 
-/// Creates a plain-style bar button item with the given item. The constructed item will present the menu immediately when touched.
+/// Creates a plain-style bar button item with the given image. The constructed item will present the menu immediately when touched.
 - (instancetype)initWithImage:(nullable UIImage *)image menu:(nullable UIMenu *)menu API_AVAILABLE(ios(14.0));
 
+/// Creates a plain-style bar button item from the properties of primaryAction. primaryAction is copied.
+- (instancetype)initWithPrimaryAction:(nullable UIAction *)primaryAction menu:(nullable UIMenu *)menu API_AVAILABLE(ios(16.0));
+
+/// Creates a bar button item for the given systemItem. The primaryAction is copied, and its title & image are ignored.
+- (instancetype)initWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem primaryAction:(nullable UIAction *)primaryAction menu:(nullable UIMenu *)menu API_AVAILABLE(ios(16.0));
+
+/// Creates a plain-style bar button item with the given title and image.
+- (instancetype)initWithTitle:(nullable NSString *)title image:(nullable UIImage *)image target:(nullable id)target action:(nullable SEL)action menu:(nullable UIMenu *)menu API_AVAILABLE(ios(16.0));
+
 /// Construct a new fixed space item with the given width.
 + (instancetype)fixedSpaceItemOfWidth:(CGFloat)width API_AVAILABLE(ios(14.0));
 
diff -ruN /Applications/Xcode_14.0.0-beta3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIBarButtonItemGroup.h /Applications/Xcode_14.0.0-beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIBarButtonItemGroup.h
--- /Applications/Xcode_14.0.0-beta3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIBarButtonItemGroup.h	2022-06-30 22:08:35.000000000 -0400
+++ /Applications/Xcode_14.0.0-beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIBarButtonItemGroup.h	2022-07-22 10:04:37.000000000 -0400
@@ -41,6 +41,9 @@
 /// Returns YES if the representativeItem of this group is currently being displayed, rather than its barButtonItems.
 @property (nonatomic, readonly, assign, getter = isDisplayingRepresentativeItem) BOOL displayingRepresentativeItem;
 
+/// Instructs UIKit to ensure that the functionality in this group is made available to the user regardless of customization status. On iPhone and iPad idioms, UIKit currently places these items in the overflow menu; this property has no effect on macOS idiom.
+@property (nonatomic, readwrite, assign) BOOL alwaysAvailable API_AVAILABLE(ios(16.0)) API_UNAVAILABLE(tvos, watchos);
+
 /// A UIMenuElement that should substitute for the UIBarButtonItemGroup when displayed in a menu.
 @property (nonatomic, readwrite, copy, nullable) UIMenuElement *menuRepresentation API_AVAILABLE(ios(16.0)) API_UNAVAILABLE(tvos, watchos);
 
diff -ruN /Applications/Xcode_14.0.0-beta3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIFindSession.h /Applications/Xcode_14.0.0-beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIFindSession.h
--- /Applications/Xcode_14.0.0-beta3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIFindSession.h	2022-06-30 19:28:29.000000000 -0400
+++ /Applications/Xcode_14.0.0-beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIFindSession.h	2022-07-25 15:34:22.000000000 -0400
@@ -103,8 +103,8 @@
 /// @param direction    Which direction the user intends to move, either forward or backward.
 - (void)highlightNextResultInDirection:(UITextStorageDirection)direction;
 
-/// Call this method to invalidate all currently shown ranges. This will cause the system find panel to update
-/// it's current state, and may trigger a new search using `performSearchWithQuery:` immediately after.
+/// This method will be called whenever the current find session's found/highlighted results are to be invalidated. For instance,
+/// when the search query is cleared, options changed, or any other event where we may not perform another search right away.
 - (void)invalidateFoundResults;
 
 @end
diff -ruN /Applications/Xcode_14.0.0-beta3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIKit.apinotes /Applications/Xcode_14.0.0-beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIKit.apinotes
--- /Applications/Xcode_14.0.0-beta3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIKit.apinotes	2022-06-28 23:19:15.000000000 -0400
+++ /Applications/Xcode_14.0.0-beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIKit.apinotes	2022-07-19 01:07:25.000000000 -0400
@@ -30,6 +30,15 @@
     SwiftName: textLayoutFragment(for:)
 - Name: NSTextListElement
   Methods:
+  - Selector: "initWithParentElement:textList:contents:markerAttributes:childElements:"
+    MethodKind: Instance
+    SwiftName: init(parent:textList:contents:markerAttributes:children:)
+  - Selector: "textListElementWithContents:markerAttributes:textList:childElements:"
+    MethodKind: Class
+    SwiftName: init(contents:markerAttributes:textList:children:)
+  - Selector: "textListElementWithChildElements:textList:nestingLevel:"
+    MethodKind: Class
+    SwiftName: init(children:textList:nestingLevel:)
   - Selector: "childElements"
     MethodKind: Instance
     SwiftName: children
@@ -562,6 +571,15 @@
   - Selector: 'creatingOptionalGroupWithCustomizationIdentifier:inDefaultCustomization:'
     MethodKind: Instance
     SwiftPrivate: true
+  - Selector: 'initWithPrimaryAction:menu:'
+    MethodKind: Instance
+    SwiftPrivate: true
+  - Selector: 'initWithBarButtonSystemItem:primaryAction:menu:'
+    MethodKind: Instance
+    SwiftPrivate: true
+  - Selector: 'initWithTitle:image:target:action:menu:'
+    MethodKind: Instance
+    SwiftPrivate: true
 - Name: UIBarButtonItemGroup
   Methods:
   - Selector: 'fixedGroupWithRepresentativeItem:items:'
@@ -1216,6 +1234,30 @@
   - Selector: 'tabBarController:interactionControllerForAnimationController:'
     SwiftName: tabBarController(_:interactionControllerFor:)
     MethodKind: Instance
+- Name: UITextInput
+  Methods:
+  - Selector: 'willPresentEditMenuWithAnimator:'
+    SwiftName: willPresentEditMenu(animator:)
+    MethodKind: Instance
+  - Selector: 'willDismissEditMenuWithAnimator:'
+    SwiftName: willDismissEditMenu(animator:)
+    MethodKind: Instance
+- Name: UITextViewDelegate
+  Methods:
+  - Selector: 'textView:willPresentEditMenuWithAnimator:'
+    SwiftName: textView(_:willPresentEditMenuWith:)
+    MethodKind: Instance
+  - Selector: 'textView:willDismissEditMenuWithAnimator:'
+    SwiftName: textView(_:willDismissEditMenuWith:)
+    MethodKind: Instance
+- Name: UITextFieldDelegate
+  Methods:
+  - Selector: 'textField:willPresentEditMenuWithAnimator:'
+    SwiftName: textField(_:willPresentEditMenuWith:)
+    MethodKind: Instance
+  - Selector: 'textField:willDismissEditMenuWithAnimator:'
+    SwiftName: textField(_:willDismissEditMenuWith:)
+    MethodKind: Instance
 - Name: UITextPasteItem
   Methods:
   - Selector: 'setStringResult:'
diff -ruN /Applications/Xcode_14.0.0-beta3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UINavigationItem.h /Applications/Xcode_14.0.0-beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UINavigationItem.h
--- /Applications/Xcode_14.0.0-beta3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UINavigationItem.h	2022-06-30 22:11:02.000000000 -0400
+++ /Applications/Xcode_14.0.0-beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UINavigationItem.h	2022-07-22 10:06:59.000000000 -0400
@@ -154,9 +154,13 @@
 
 /// UIBarButtonItemGroups to be displayed in the trailing section of the navigation bar. Items set via this method will replace items set via .rightBarButtonItem or .rightBarButtonItems.
 @property (nonatomic, readwrite, copy) NSArray<UIBarButtonItemGroup *> *trailingItemGroups API_AVAILABLE(ios(16.0)) API_UNAVAILABLE(tvos, watchos);
+/// Set a group of items to be placed on the trailing edge of the bar, past the overflow & search items (if present). If you wish to have more than 1 item, it is HIGHLY recommended to assign a representative item to the group to avoid overflowing the bar as this group cannot move to the overflow.
+@property (nonatomic, readwrite, strong, nullable) UIBarButtonItemGroup *pinnedTrailingGroup API_AVAILABLE(ios(16.0)) API_UNAVAILABLE(tvos, watchos);
 
 /// Additional items to add to the overflow menu. Setting this property to a non-nil value will force the overflow button to appear, regardless of if you provide any content in the element's callback. Items returned are displayed directly in the presented menu.
 @property (nonatomic, readwrite, strong, nullable) UIDeferredMenuElement *additionalOverflowItems API_AVAILABLE(ios(16.0)) API_UNAVAILABLE(tvos, watchos);
+/// If the overflow button for this item is currently present, then this will return a non-nil item that can be used as a presentation source (e.g. for popovers). Otherwise it will return nil.
+@property (nonatomic, readonly, strong, nullable) id<UIPopoverPresentationControllerSourceItem> overflowPresentationSource API_AVAILABLE(ios(16.0)) API_UNAVAILABLE(tvos, watchos);
 
 /// When UINavigationBar.prefersLargeTitles=YES, this property controls when the larger out-of-line title is displayed. If prefersLargeTitles=NO, this property has no effect. The default value is Automatic.
 @property (nonatomic, readwrite, assign) UINavigationItemLargeTitleDisplayMode largeTitleDisplayMode API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(tvos);
diff -ruN /Applications/Xcode_14.0.0-beta3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UISearchBar.h /Applications/Xcode_14.0.0-beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UISearchBar.h
--- /Applications/Xcode_14.0.0-beta3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UISearchBar.h	2022-06-30 22:08:30.000000000 -0400
+++ /Applications/Xcode_14.0.0-beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UISearchBar.h	2022-07-25 15:34:13.000000000 -0400
@@ -100,6 +100,7 @@
  If the search bar is owned by a UISearchController, then using the setter
  for this property (as well as -setShowsScopeBar:animated:) will implicitly
  set the UISearchController's automaticallyShowsScopeBar property to NO.
+ On iOS 16.0, UISearchController's scopeBarActivation is set to UISearchControllerScopeBarActivationManual
  */
 @property(nonatomic)      BOOL       showsScopeBar            API_AVAILABLE(ios(3.0)); // default is NO. if YES, shows the scope bar. call sizeToFit: to update frame
 - (void)setShowsScopeBar:(BOOL)show animated:(BOOL)animate API_AVAILABLE(ios(13.0));
diff -ruN /Applications/Xcode_14.0.0-beta3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UISearchController.h /Applications/Xcode_14.0.0-beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UISearchController.h
--- /Applications/Xcode_14.0.0-beta3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UISearchController.h	2022-06-30 09:31:55.000000000 -0400
+++ /Applications/Xcode_14.0.0-beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UISearchController.h	2022-07-22 10:06:47.000000000 -0400
@@ -14,6 +14,17 @@
 
 NS_HEADER_AUDIT_BEGIN(nullability, sendability)
 
+typedef NS_ENUM(NSInteger, UISearchControllerScopeBarActivation) {
+    /// System-defined automatic showing and hiding of the scope bar
+    UISearchControllerScopeBarActivationAutomatic,
+    /// Showing and hiding the scope bar will be controlled by client code through the `showsScopeBar` API on the UISearchController's `searchBar`
+    UISearchControllerScopeBarActivationManual,
+    /// The search controller shows the scope bar when typing begins in the search field, and hides it when search is cancelled
+    UISearchControllerScopeBarActivationOnTextEntry,
+    /// The search controller shows the scope bar when search becomes active, and hides it when search is cancelled
+    UISearchControllerScopeBarActivationOnSearchActivation,
+} API_AVAILABLE(ios(16.0)) API_UNAVAILABLE(tvos, watchos) NS_SWIFT_NAME(UISearchController.ScopeBarActivation);
+
 @class UISearchController;
 
 NS_SWIFT_UI_ACTOR
@@ -101,8 +112,19 @@
  
  Additionally, setting the showsScopeBar property on the searchController's searchBar
  will change the UISearchController's automaticallyShowsScopeBar property to NO.
+ 
+ On iOS, this will be fully deprecated in a future release in favor of `scopeBarActivation`
  */
-@property (nonatomic) BOOL automaticallyShowsScopeBar API_AVAILABLE(ios(13.0)); // Defaults to YES
+@property (nonatomic) BOOL automaticallyShowsScopeBar API_DEPRECATED("Use scopeBarActivation instead", ios(13.0,API_TO_BE_DEPRECATED)) API_AVAILABLE(tvos(13.0));
+
+/// Controls if and when the UISearchController shows and hides the scope bar
+/// However, UISearchBar will not show the scope bar if `scopeButtonTitles` contains fewer than two titles
+/// Defaults to `UISearchControllerScopeBarActivationAutomatic`
+/// `UISearchControllerScopeBarActivationAutomatic` is equivalent to earlier `automaticallyShowsScopeBar == YES`
+/// `UISearchControllerScopeBarActivationManual` is equivalent to earlier `automaticallyShowsScopeBar == NO`
+/// Similar to the behavior of `automaticallyShowsScopeBar`, setting the `showsScopeBar` property on the `searchController`'s `searchBar`
+/// will change `scopeBarActivation` to `UISearchControllerScopeBarActivationManual`
+@property (nonatomic) UISearchControllerScopeBarActivation scopeBarActivation API_AVAILABLE(ios(16.0)) API_UNAVAILABLE(tvos, watchos);
 
 /// List of search hint objects to be displayed under keyboard on tvOS,
 /// as a menu under the search field when the search bar is placed inline on iOS 16,
diff -ruN /Applications/Xcode_14.0.0-beta3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UITextField.h /Applications/Xcode_14.0.0-beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UITextField.h
--- /Applications/Xcode_14.0.0-beta3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UITextField.h	2022-06-30 22:08:32.000000000 -0400
+++ /Applications/Xcode_14.0.0-beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UITextField.h	2022-07-22 10:07:16.000000000 -0400
@@ -164,6 +164,22 @@
  */
 - (nullable UIMenu *)textField:(UITextField *)textField editMenuForCharactersInRange:(NSRange)range suggestedActions:(NSArray<UIMenuElement *> *)suggestedActions API_AVAILABLE(ios(16.0));
 
+/**
+ * @abstract Called when the text field is about to present the edit menu.
+ *
+ * @param textField    The text field displaying the menu.
+ * @param animator      Appearance animator. Add animations to this object to run them alongside the appearance transition.
+ */
+- (void)textField:(UITextField *)textField willPresentEditMenuWithAnimator:(id<UIEditMenuInteractionAnimating>)animator API_AVAILABLE(ios(16.0)) API_UNAVAILABLE(tvos, watchos);
+
+/**
+ * @abstract Called when the text field is about to dismiss the edit menu.
+ *
+ * @param textField    The text field displaying the menu.
+ * @param animator      Dismissal animator. Add animations to this object to run them alongside the dismissal transition.
+ */
+- (void)textField:(UITextField *)textField willDismissEditMenuWithAnimator:(id<UIEditMenuInteractionAnimating>)aniamtor API_AVAILABLE(ios(16.0)) API_UNAVAILABLE(tvos, watchos);
+
 @end
 
 UIKIT_EXTERN NSNotificationName const UITextFieldTextDidBeginEditingNotification;
diff -ruN /Applications/Xcode_14.0.0-beta3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UITextInput.h /Applications/Xcode_14.0.0-beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UITextInput.h
--- /Applications/Xcode_14.0.0-beta3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UITextInput.h	2022-06-30 09:29:33.000000000 -0400
+++ /Applications/Xcode_14.0.0-beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UITextInput.h	2022-07-22 10:07:10.000000000 -0400
@@ -41,6 +41,7 @@
 
 @protocol UITextInputTokenizer;
 @protocol UITextInputDelegate;
+@protocol UIEditMenuInteractionAnimating;
 
 typedef NS_ENUM(NSInteger, UITextStorageDirection) {
     UITextStorageDirectionForward = 0,
@@ -239,6 +240,10 @@
  */
 - (nullable UIMenu *)editMenuForTextRange:(UITextRange *)textRange suggestedActions:(NSArray<UIMenuElement *> *)suggestedActions API_AVAILABLE(ios(16.0));
 
+/* These are optional methods for clients that wish to know the visiblity of text editing menus */
+- (void)willPresentEditMenuWithAnimator:(id<UIEditMenuInteractionAnimating>)animator API_AVAILABLE(ios(16.0)) API_UNAVAILABLE(watchos, tvos);
+- (void)willDismissEditMenuWithAnimator:(id<UIEditMenuInteractionAnimating>)animator API_AVAILABLE(ios(16.0)) API_UNAVAILABLE(watchos, tvos);
+
 @end
 
 //---------------------------------------------------------------------------------------------------
diff -ruN /Applications/Xcode_14.0.0-beta3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UITextSearching.h /Applications/Xcode_14.0.0-beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UITextSearching.h
--- /Applications/Xcode_14.0.0-beta3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UITextSearching.h	2022-06-30 09:32:04.000000000 -0400
+++ /Applications/Xcode_14.0.0-beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UITextSearching.h	2022-07-22 10:04:37.000000000 -0400
@@ -65,7 +65,7 @@
 /// the system find panel to know which @c UITextRange to highlight next when the user taps the "next" or "previous"
 /// result buttons.
 ///
-/// @param fromRange    Developer-provided range to compare from.
+/// @param foundRange    Developer-provided range to compare from.
 /// @param toRange  Developer-provided range to compare to.
 /// @param document If multiple documents are used, a document identifier will be provided here. Ranges are only
 ///                compared between other ranges of the same document.
diff -ruN /Applications/Xcode_14.0.0-beta3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UITextView.h /Applications/Xcode_14.0.0-beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UITextView.h
--- /Applications/Xcode_14.0.0-beta3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UITextView.h	2022-06-30 09:32:09.000000000 -0400
+++ /Applications/Xcode_14.0.0-beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UITextView.h	2022-07-22 10:04:42.000000000 -0400
@@ -24,6 +24,7 @@
 NS_HEADER_AUDIT_BEGIN(nullability, sendability)
 
 @class UIFindInteraction, UIFont, UIColor, UIMenu, UIMenuElement, UITextView, NSTextContainer, NSTextLayoutManager, NSLayoutManager, NSTextStorage, NSTextAttachment;
+@protocol UIEditMenuInteractionAnimating;
 
 NS_SWIFT_UI_ACTOR
 @protocol UITextViewDelegate <NSObject, UIScrollViewDelegate>
@@ -58,6 +59,22 @@
  */
 - (nullable UIMenu *)textView:(UITextView *)textView editMenuForTextInRange:(NSRange)range suggestedActions:(NSArray<UIMenuElement *> *)suggestedActions API_AVAILABLE(ios(16.0));
 
+/**
+ * @abstract Called when the text view is about to present the edit menu.
+ *
+ * @param textView      The text view displaying the menu.
+ * @param animator      Appearance animator. Add animations to this object to run them alongside the appearance transition.
+ */
+- (void)textView:(UITextView *)textView willPresentEditMenuWithAnimator:(id<UIEditMenuInteractionAnimating>)animator API_AVAILABLE(ios(16.0)) API_UNAVAILABLE(tvos, watchos);
+
+/**
+ * @abstract Called when the text view is about to dismiss the edit menu.
+ *
+ * @param textView      The text view displaying the menu.
+ * @param animator      Dismissal animator. Add animations to this object to run them alongside the dismissal transition.
+ */
+- (void)textView:(UITextView *)textView willDismissEditMenuWithAnimator:(id<UIEditMenuInteractionAnimating>)aniamtor API_AVAILABLE(ios(16.0)) API_UNAVAILABLE(tvos, watchos);
+
 @end
 
 UIKIT_EXTERN API_AVAILABLE(ios(2.0)) NS_SWIFT_UI_ACTOR
Clone this wiki locally