pub unsafe trait UIWritingToolsCoordinatorDelegate: NSObjectProtocol {
// Provided methods
unsafe fn writingToolsCoordinator_requestsContextsForScope_completion(
&self,
writing_tools_coordinator: &UIWritingToolsCoordinator,
scope: UIWritingToolsCoordinatorContextScope,
completion: &DynBlock<dyn Fn(NonNull<NSArray<UIWritingToolsCoordinatorContext>>)>,
)
where Self: Sized + Message { ... }
unsafe fn writingToolsCoordinator_replaceRange_inContext_proposedText_reason_animationParameters_completion(
&self,
writing_tools_coordinator: &UIWritingToolsCoordinator,
range: NSRange,
context: &UIWritingToolsCoordinatorContext,
replacement_text: &NSAttributedString,
reason: UIWritingToolsCoordinatorTextReplacementReason,
animation_parameters: Option<&UIWritingToolsCoordinatorAnimationParameters>,
completion: &DynBlock<dyn Fn(*mut NSAttributedString)>,
)
where Self: Sized + Message { ... }
unsafe fn writingToolsCoordinator_selectRanges_inContext_completion(
&self,
writing_tools_coordinator: &UIWritingToolsCoordinator,
ranges: &NSArray<NSValue>,
context: &UIWritingToolsCoordinatorContext,
completion: &DynBlock<dyn Fn()>,
)
where Self: Sized + Message { ... }
unsafe fn writingToolsCoordinator_requestsBoundingBezierPathsForRange_inContext_completion(
&self,
writing_tools_coordinator: &UIWritingToolsCoordinator,
range: NSRange,
context: &UIWritingToolsCoordinatorContext,
completion: &DynBlock<dyn Fn(NonNull<NSArray<UIBezierPath>>)>,
)
where Self: Sized + Message { ... }
unsafe fn writingToolsCoordinator_requestsUnderlinePathsForRange_inContext_completion(
&self,
writing_tools_coordinator: &UIWritingToolsCoordinator,
range: NSRange,
context: &UIWritingToolsCoordinatorContext,
completion: &DynBlock<dyn Fn(NonNull<NSArray<UIBezierPath>>)>,
)
where Self: Sized + Message { ... }
unsafe fn writingToolsCoordinator_prepareForTextAnimation_forRange_inContext_completion(
&self,
writing_tools_coordinator: &UIWritingToolsCoordinator,
text_animation: UIWritingToolsCoordinatorTextAnimation,
range: NSRange,
context: &UIWritingToolsCoordinatorContext,
completion: &DynBlock<dyn Fn()>,
)
where Self: Sized + Message { ... }
unsafe fn writingToolsCoordinator_requestsPreviewForTextAnimation_ofRange_inContext_completion(
&self,
writing_tools_coordinator: &UIWritingToolsCoordinator,
text_animation: UIWritingToolsCoordinatorTextAnimation,
range: NSRange,
context: &UIWritingToolsCoordinatorContext,
completion: &DynBlock<dyn Fn(*mut UITargetedPreview)>,
)
where Self: Sized + Message { ... }
unsafe fn writingToolsCoordinator_finishTextAnimation_forRange_inContext_completion(
&self,
writing_tools_coordinator: &UIWritingToolsCoordinator,
text_animation: UIWritingToolsCoordinatorTextAnimation,
range: NSRange,
context: &UIWritingToolsCoordinatorContext,
completion: &DynBlock<dyn Fn()>,
)
where Self: Sized + Message { ... }
unsafe fn writingToolsCoordinator_requestsSingleContainerSubrangesOfRange_inContext_completion(
&self,
writing_tools_coordinator: &UIWritingToolsCoordinator,
range: NSRange,
context: &UIWritingToolsCoordinatorContext,
completion: &DynBlock<dyn Fn(NonNull<NSArray<NSValue>>)>,
)
where Self: Sized + Message { ... }
unsafe fn writingToolsCoordinator_requestsDecorationContainerViewForRange_inContext_completion(
&self,
writing_tools_coordinator: &UIWritingToolsCoordinator,
range: NSRange,
context: &UIWritingToolsCoordinatorContext,
completion: &DynBlock<dyn Fn(NonNull<UIView>)>,
)
where Self: Sized + Message { ... }
unsafe fn writingToolsCoordinator_willChangeToState_completion(
&self,
writing_tools_coordinator: &UIWritingToolsCoordinator,
new_state: UIWritingToolsCoordinatorState,
completion: &DynBlock<dyn Fn()>,
)
where Self: Sized + Message { ... }
unsafe fn writingToolsCoordinator_requestsRangeInContextWithIdentifierForPoint_completion(
&self,
writing_tools_coordinator: &UIWritingToolsCoordinator,
point: CGPoint,
completion: &DynBlock<dyn Fn(NSRange, NonNull<NSUUID>)>,
)
where Self: Sized + Message { ... }
}
UIWritingToolsCoordinator
only.Expand description
An interface that you use to manage interactions between Writing Tools and your custom text view.
Adopt the UIWritingToolsCoordinator.Delegate
protocol in the type you
use to manage your custom text view. When you add a UIWritingToolsCoordinator
object to your view, the coordinator uses this protocol to communicate
with that view. The protocol lets Writing Tools fetch your view’s text,
report suggested changes back to your view, and deliver visual feedback
when Writing Tools features are active. Make sure the type that adopts
this protocol has access to your view’s text storage and can perform
relevant tasks on behalf of the view.
Writing Tools expects you to call the provided handler blocks at the end of your delegate methods. It’s crucial that you execute these blocks in a timely manner to allow Writing Tools to perform subsequent tasks. For example, Writing Tools waits for you to execute the handlers for animation-related methods before moving on to the next stage of the animations.
See also Apple’s documentation
Provided Methods§
Sourceunsafe fn writingToolsCoordinator_requestsContextsForScope_completion(
&self,
writing_tools_coordinator: &UIWritingToolsCoordinator,
scope: UIWritingToolsCoordinatorContextScope,
completion: &DynBlock<dyn Fn(NonNull<NSArray<UIWritingToolsCoordinatorContext>>)>,
)
Available on crate features UIWritingToolsCoordinatorContext
and block2
only.
unsafe fn writingToolsCoordinator_requestsContextsForScope_completion( &self, writing_tools_coordinator: &UIWritingToolsCoordinator, scope: UIWritingToolsCoordinatorContextScope, completion: &DynBlock<dyn Fn(NonNull<NSArray<UIWritingToolsCoordinatorContext>>)>, )
UIWritingToolsCoordinatorContext
and block2
only.Asks your delegate to provide the text to evaluate during the Writing Tools operation.
- Parameters:
- writingToolsCoordinator: The coordinator object requesting information from your custom view.
- scope: The amount of text the coordinator requested. Use this property to determine if Writing Tools is evaluating all of your text or only a subset.
- completion: A completion block to execute with the required information.
You must execute this block once at end of your method’s implementation.
The block has no return value and takes an array of
UIWritingToolsCoordinator/Context
objects that contain the requested information.
At the start of every operation, the UIWritingToolsCoordinator
object calls
this method to request the text to evaluate. Use this method to create one or
more UIWritingToolsCoordinator/Context
objects with your view’s text.
Create only one UIWritingToolsCoordinator/Context
object if your view has
only one text storage object. If your view contains multiple text storage objects,
create separate UIWritingToolsCoordinator/Context
objects for each
text storage object. Writing Tools returns updates for each context object
separately, making it easier for you to incorporate changes into the correct
text storage object. Don’t create multiple context objects if your view has
only one text storage object.
The scope
parameter tells you what content Writing Tools expects you to provide
in your context object. For example, Writing Tools expects you to provide the
selected text when the parameter contains the UIWritingToolsCoordinator/ContextScope/userSelection
option. When Writing Tools requests a subset of your overall text, include
some of the surrounding text in your context object too. Writing Tools can
use the extra text you provide to improve the results of its evaluation. For
example, it might use an entire paragraph, instead of only the selected sentence,
to evaluate ways to rewrite that sentence. It’s best to include the text up
to the nearest paragraph boundary before and after the selection. If you
include extra text in your context object, set the UIWritingToolsCoordinator/Context/range
property to the range of the selected text.
Note: When a context object stores only a subset of your view’s text, record additional information to map the location of that text to the correct location in your view’s text storage. Keep that information up-to-date throughout the Writing Tools session.
Pass the context objects you create to the provided completion handler before your method returns. Writing Tools waits for you to call the completion handler before proceeding with the operation.
Sourceunsafe fn writingToolsCoordinator_replaceRange_inContext_proposedText_reason_animationParameters_completion(
&self,
writing_tools_coordinator: &UIWritingToolsCoordinator,
range: NSRange,
context: &UIWritingToolsCoordinatorContext,
replacement_text: &NSAttributedString,
reason: UIWritingToolsCoordinatorTextReplacementReason,
animation_parameters: Option<&UIWritingToolsCoordinatorAnimationParameters>,
completion: &DynBlock<dyn Fn(*mut NSAttributedString)>,
)
Available on crate features UIWritingToolsCoordinatorAnimationParameters
and UIWritingToolsCoordinatorContext
and block2
only.
unsafe fn writingToolsCoordinator_replaceRange_inContext_proposedText_reason_animationParameters_completion( &self, writing_tools_coordinator: &UIWritingToolsCoordinator, range: NSRange, context: &UIWritingToolsCoordinatorContext, replacement_text: &NSAttributedString, reason: UIWritingToolsCoordinatorTextReplacementReason, animation_parameters: Option<&UIWritingToolsCoordinatorAnimationParameters>, completion: &DynBlock<dyn Fn(*mut NSAttributedString)>, )
UIWritingToolsCoordinatorAnimationParameters
and UIWritingToolsCoordinatorContext
and block2
only.Tells the delegate that there are text changes to incorporate into the view.
- Parameters:
- writingToolsCoordinator: The coordinator object providing the changes to your custom view.
- range: A range of text to update. This range is relative to the text
in your context object, and it’s your responsibility to match that location
to the correct location in your text storage. If you initialized the
context object with the entire contents of your view’s text storage,
you can use
range
as-is to access that text storage. However, if you initialized the context object with only a portion of your view’s text, add the starting location of your context object’s text to this value to get the correct range for that text storage. - context: The context object that contains the original text to modify. Use this object to locate the correct text storage object for your view.
- replacementText: The text to insert in place of the current text at
range
. You can insert this text as-is, insert a modified version of this string, or reject the replacement text altogether. - reason: The type of replacement Writing Tools performs. This parameter indicates whether Writing Tools is replacing the text with or without animations.
- animationParameters: The animation parameters for any interactive changes,
or
nil
if the changes aren’t interactive. Use this object to create any additional animations for the system to run alongside the changes Writing Tools makes. For example, use it to update other views that contain related information. - completion: A completion handler to execute with the results of the operation.
The handler has no return value and takes an optional attributed string as
a parameter. If you incorporate the replacement text, either as-is or with
modifications, pass the actual string you incorporated to the completion
block. If you reject the suggested change and leave the original text
unchanged, specify
nil
for this parameter.
Use this method to update your view’s text storage with the proposed changes. Writing Tools can call this method multiple times during the course of a session to notify you of changes to different ranges of text. Incorporate the changes into your view’s text storage and notify your layout manager so it can refresh the view.
Important: When integrating changes, remember to update
range.location
as needed to get the correct location in your view’s text storage.
Remove the text in the appropriate range of your text storage, and replace
it with the contents of replacementText
. When you finish, call the completion
handler and pass in the replacement text you inserted. If you change the
string in replacementText
before incorporating it into your text storage,
return your modified string instead. Returning the string lets Writing Tools
track any alterations you made to it. You can also pass nil
to the
completion handler if you don’t incorporate the replacement text.
For interactive changes, Writing Tools works with your delegate to animate
the removal of the old text and the insertion of any replacement text. If
you need to modify other parts of your interface to reflect the changes,
use the provided UIWritingToolsCoordinator/AnimationParameters
object
to create additional animations to run at the same time as the system-provided animations.
Sourceunsafe fn writingToolsCoordinator_selectRanges_inContext_completion(
&self,
writing_tools_coordinator: &UIWritingToolsCoordinator,
ranges: &NSArray<NSValue>,
context: &UIWritingToolsCoordinatorContext,
completion: &DynBlock<dyn Fn()>,
)
Available on crate features UIWritingToolsCoordinatorContext
and block2
only.
unsafe fn writingToolsCoordinator_selectRanges_inContext_completion( &self, writing_tools_coordinator: &UIWritingToolsCoordinator, ranges: &NSArray<NSValue>, context: &UIWritingToolsCoordinatorContext, completion: &DynBlock<dyn Fn()>, )
UIWritingToolsCoordinatorContext
and block2
only.Asks the delegate to update your view’s current text selection.
- Parameters:
- writingToolsCoordinator: The coordinator object making the change to your view.
- ranges: One or more ranges of text to select. Each range is relative to the text in your context object, and it’s your responsibility to match each location to the correct location in your text storage. If you initialized the context object with the entire contents of your view’s text storage, you can use the ranges as-is to access that text storage. However, if you initialized the context object with only a portion of your view’s text, add the starting location of your context object’s text to each value to get the correct range for that text storage.
- context: The context object you use to identify the associated text storage.
- completion: The completion handler to execute when your delegate finishes updating the selection. The handler has no parameters or return value. You must call this handler at some point during the implementation of your method.
As Writing Tools suggests changes to your view’s text, it calls this method to update the text selection accordingly. Use this method to update the current selection in your view’s text storage. When you finish making the changes, call the provided completion block to let Writing Tools know you’re finished.
Sourceunsafe fn writingToolsCoordinator_requestsBoundingBezierPathsForRange_inContext_completion(
&self,
writing_tools_coordinator: &UIWritingToolsCoordinator,
range: NSRange,
context: &UIWritingToolsCoordinatorContext,
completion: &DynBlock<dyn Fn(NonNull<NSArray<UIBezierPath>>)>,
)
Available on crate features UIBezierPath
and UIWritingToolsCoordinatorContext
and block2
only.
unsafe fn writingToolsCoordinator_requestsBoundingBezierPathsForRange_inContext_completion( &self, writing_tools_coordinator: &UIWritingToolsCoordinator, range: NSRange, context: &UIWritingToolsCoordinatorContext, completion: &DynBlock<dyn Fn(NonNull<NSArray<UIBezierPath>>)>, )
UIBezierPath
and UIWritingToolsCoordinatorContext
and block2
only.Asks the delegate to provide the bounding paths for the specified text in your view.
- Parameters:
- writingToolsCoordinator: The coordinator object requesting information from your custom view.
- range: The range of text to evaluate. This range is relative to the
text in your context object, and it’s your responsibility to match that
location to the correct location in your text storage. If you initialized
the context object with the entire contents of your view’s text storage,
you can use
range
as-is to access that text storage. However, if you initialized the context object with only a portion of your view’s text, add the starting location of your context object’s text to this value to get the correct range for that text storage. - context: The context object with the target text. Use this object to find the text in your view’s text storage.
- completion: A handler to execute with the required information. The handler has no return value and takes an array of Bezier paths as a parameter. You must call this handler at some point during your method’s implementation.
After applying proofreading marks to your view’s text, Writing Tools lets the person accept or reject individual suggestions. To facilitate interactions, the coordinator asks your delegate to provide one or more Bezier paths that surround those proofreading suggestions. For each distinct range of text with a suggestion, it calls this method to get the Bezier paths that surround the corresponding text.
After you determine the location of the specified range of text in your view’s
text storage, call the
<doc
://com.apple.documentation/documentation/uikit/nstextlayoutmanager/3809995-enumeratetextsegments>
method of your view’s
<doc
://com.apple.documentation/documentation/uikit/nstextlayoutmanager>
to compute the selection rectangles for that text. That method finds the text
segments that contain the text and returns the frame rectangle for each one.
Create a Bezier path for each rectangle, and convert the coordinates of each path
to the coordinate space of the view in your coordinator’s UIWritingToolsCoordinator/decorationContainerView
property. Pass the resulting paths to the completion handler.
Sourceunsafe fn writingToolsCoordinator_requestsUnderlinePathsForRange_inContext_completion(
&self,
writing_tools_coordinator: &UIWritingToolsCoordinator,
range: NSRange,
context: &UIWritingToolsCoordinatorContext,
completion: &DynBlock<dyn Fn(NonNull<NSArray<UIBezierPath>>)>,
)
Available on crate features UIBezierPath
and UIWritingToolsCoordinatorContext
and block2
only.
unsafe fn writingToolsCoordinator_requestsUnderlinePathsForRange_inContext_completion( &self, writing_tools_coordinator: &UIWritingToolsCoordinator, range: NSRange, context: &UIWritingToolsCoordinatorContext, completion: &DynBlock<dyn Fn(NonNull<NSArray<UIBezierPath>>)>, )
UIBezierPath
and UIWritingToolsCoordinatorContext
and block2
only.Asks the delegate to provide an underline shape for the specified text during a proofreading session.
- Parameters:
- writingToolsCoordinator: The coordinator object requesting information from your custom view.
- range: The range of text to evaluate. This range is relative to the
text in your context object, and it’s your responsibility to match that
location to the correct location in your text storage. If you initialized
the context object with the entire contents of your view’s text storage,
you can use
range
as-is to access that text storage. However, if you initialized the context object with only a portion of your view’s text, add the starting location of your context object’s text to this value to get the correct range for that text storage. - context: The context object with the target text. Use this object to find the text in your view’s text storage.
- completion: A handler to execute with the required information. The handler has no return value and takes an array of Bezier paths as a parameter. You must call this handler at some point during your method’s implementation.
When applying proofreading marks to your view’s content, the coordinator calls this method to retrieve a shape to draw under the specified text. You provide the shape using one or more Bezier paths, and the coordinator draws and animates that shape during the proofreading session.
After you determine the location of the specified range of text in your
view’s text storage, find the rectangle around that text. If you’re using
TextKit, you can call the
<doc
://com.apple.documentation/documentation/uikit/nstextlayoutmanager/3809995-enumeratetextsegments>
method of your view’s
<doc
://com.apple.documentation/documentation/uikit/nstextlayoutmanager>
to get the rectangles for a range of text. Convert the coordinates of each rectangle
to the coordinate space of the view in your coordinator’s UIWritingToolsCoordinator/decorationContainerView
property. Use those rectangles to create the Bezier paths for your text.
For example, you might create a path with a straight or wavy line at the
bottom of the rectangle.
Sourceunsafe fn writingToolsCoordinator_prepareForTextAnimation_forRange_inContext_completion(
&self,
writing_tools_coordinator: &UIWritingToolsCoordinator,
text_animation: UIWritingToolsCoordinatorTextAnimation,
range: NSRange,
context: &UIWritingToolsCoordinatorContext,
completion: &DynBlock<dyn Fn()>,
)
Available on crate features UIWritingToolsCoordinatorContext
and block2
only.
unsafe fn writingToolsCoordinator_prepareForTextAnimation_forRange_inContext_completion( &self, writing_tools_coordinator: &UIWritingToolsCoordinator, text_animation: UIWritingToolsCoordinatorTextAnimation, range: NSRange, context: &UIWritingToolsCoordinatorContext, completion: &DynBlock<dyn Fn()>, )
UIWritingToolsCoordinatorContext
and block2
only.Prepare for animations for the content that Writing Tools is evaluating.
- Parameters:
- writingToolsCoordinator: The coordinator object notifying you that animations are about to begin.
- textAnimation: The type of animation Writing Tools is preparing.
- range: The range of text affected by the animation. This range is
relative to the text in your context object, and it’s your responsibility
to match that location to the correct location in your text storage.
If you initialized the context object with the entire contents of your
view’s text storage, you can use
range
as-is to access that text storage. However, if you initialized the context object with only a portion of your view’s text, add the starting location of your context object’s text to this value to get the correct range for that text storage. - context: The context object that contains the original text. Use this object to fetch the current text, and to match that text to your underlying text storage.
- completion: A completion handler to execute when you are done. The handler has no return value and takes no parameters. You must call this handler at some point during your implementation.
During an interactive evaluation of your view’s text, Writing Tools creates
different animations to provide feedback on what’s happening. For example, it
creates an UIWritingToolsCoordinator/TextAnimation/anticipate
animation to
let people know the system is evaluating the text. The textAnimation
parameter
tells you what type of animation to prepare for.
Use this method to prepare for the system-provided animations of your view’s
content. For interactive animations, hide the text in the specified range temporarily
while the system animations run. For non-interactive animations, dim the text
for the duration of the animation to indicate it’s not editable. For animations
to remove or insert text, you can also use this method to set up animations
to reflow your view’s content to match the changes. At the end of a given animation,
use your delegate’s writingToolsCoordinator(_:finish:for:in:completion:)
method to undo any changes you make to your content.
For a single animation type, the system calls the
writingToolsCoordinator(_:requestsPreviewFor:range:context:completion:)
method,
followed sequentially by this method and the writingToolsCoordinator(_:finish:for:in:completion:)
method. Each method executes asynchronously, but the system calls the next
method in the sequence only after you call the completion handler of the previous
method. However, multiple animations can run simultaneously, so check the
textAnimation
and range
parameters to differentiate sequences.
Sourceunsafe fn writingToolsCoordinator_requestsPreviewForTextAnimation_ofRange_inContext_completion(
&self,
writing_tools_coordinator: &UIWritingToolsCoordinator,
text_animation: UIWritingToolsCoordinatorTextAnimation,
range: NSRange,
context: &UIWritingToolsCoordinatorContext,
completion: &DynBlock<dyn Fn(*mut UITargetedPreview)>,
)
Available on crate features UITargetedPreview
and UIWritingToolsCoordinatorContext
and block2
only.
unsafe fn writingToolsCoordinator_requestsPreviewForTextAnimation_ofRange_inContext_completion( &self, writing_tools_coordinator: &UIWritingToolsCoordinator, text_animation: UIWritingToolsCoordinatorTextAnimation, range: NSRange, context: &UIWritingToolsCoordinatorContext, completion: &DynBlock<dyn Fn(*mut UITargetedPreview)>, )
UITargetedPreview
and UIWritingToolsCoordinatorContext
and block2
only.Asks the delegate for a preview image and layout information for the specified text.
- Parameters:
- writingToolsCoordinator: The coordinator object notifying you that animations are about to begin.
- textAnimation: The type of animation Writing Tools is preparing.
- range: The range of text that requires a preview image. This range
is relative to the text in your context object, and it’s your responsibility
to match that location to the correct location in your text storage.
If you initialized the context object with the entire contents of
your view’s text storage, you can use
range
as-is to access that text storage. However, if you initialized the context object with only a portion of your view’s text, add the starting location of your context object’s text to this value to get the correct range for that text storage. - context: The context object that contains the original text. Use this object to fetch the current text, and to match that text to your underlying text storage.
- completion: A completion handler to execute when you are done. The
handler has no return value and takes a
UITargetedPreview
object as a parameter. You must call this handler at some point during your implementation.
During an interactive evaluation of your view’s text, Writing Tools creates
different animations to provide feedback on what’s happening. As part of
the preparation for those animations, Writing Tools asks you to provide
a preview of the affected content in your view. Writing Tools uses this
preview to build and execute the animations in the view stored in the
UIWritingToolsCoordinator/effectContainerView
property of the coordinator object.
To build a preview of your content in iOS, render the specified range of
text into an image with a transparent background. Install the image in a
UIImageView
and use that to build your preview object. Set the frame
rectangle of your image view to the rectangle in your view’s coordinate
space that contains the text you captured. When creating the UITargetedPreview
object, include both a UIPreviewParameters
and a UIPreviewTarget
object. Create the UIPreviewTarget
object with your text view as the
container, and set the center point to the center of your text view.
Create the UIPreviewParameters
object using the selection rectangles
for the text, which you get from your view’s layout manager. Writing Tools
uses this information to place your image directly above the text in your view.
For a single animation type, the system calls this method, followed sequentially
by the writingToolsCoordinator(_:prepareFor:range:context:completion:)
and
writingToolsCoordinator(_:finish:for:in:completion:)
methods. Each method executes asynchronously, but the system calls the next
method in the sequence only after you call the completion handler of the
previous method. However, multiple animations can run simultaneously, so
check the textAnimation
parameter to differentiate sequences.
Sourceunsafe fn writingToolsCoordinator_finishTextAnimation_forRange_inContext_completion(
&self,
writing_tools_coordinator: &UIWritingToolsCoordinator,
text_animation: UIWritingToolsCoordinatorTextAnimation,
range: NSRange,
context: &UIWritingToolsCoordinatorContext,
completion: &DynBlock<dyn Fn()>,
)
Available on crate features UIWritingToolsCoordinatorContext
and block2
only.
unsafe fn writingToolsCoordinator_finishTextAnimation_forRange_inContext_completion( &self, writing_tools_coordinator: &UIWritingToolsCoordinator, text_animation: UIWritingToolsCoordinatorTextAnimation, range: NSRange, context: &UIWritingToolsCoordinatorContext, completion: &DynBlock<dyn Fn()>, )
UIWritingToolsCoordinatorContext
and block2
only.Asks the delegate to clean up any state related to the specified Writing Tools animation.
- Parameters:
- writingToolsCoordinator: The coordinator object notifying you that animations are about to begin.
- textAnimation: The type of animation Writing Tools finished.
- range: The range of text that finished animating. This range is
relative to the text in your context object, and it’s your responsibility
to match that location to the correct location in your text storage. If
you initialized the context object with the entire contents of your
view’s text storage, you can use
range
as-is to access that text storage. However, if you initialized the context object with only a portion of your view’s text, add the starting location of your context object’s text to this value to get the correct range for that text storage. - context: The context object that contains the original text.
- completion: A completion handler to execute when you are done. The handler has no return value and takes no parameters. You must call this handler at some point during your implementation.
Use this method to clean up any data structures you created to support the specified type of Writing Tools animation. You can also use this method to restore the visibility of any text you hid previously. When you finish your cleanup work, call the completion handler to notify Writing Tools.
Writing Tools calls this method only after previous calls to the
writingToolsCoordinator(_:requestsPreviewFor:range:context:completion:)
and writingToolsCoordinator(_:prepareFor:range:context:completion:)
methods for the same animation type. However, Writing Tools can interleave
calls to this method with calls to prepare an animation of a different
type. In your implementation of this method, make sure the actions you
take don’t interfere with other in-flight animations.
Sourceunsafe fn writingToolsCoordinator_requestsSingleContainerSubrangesOfRange_inContext_completion(
&self,
writing_tools_coordinator: &UIWritingToolsCoordinator,
range: NSRange,
context: &UIWritingToolsCoordinatorContext,
completion: &DynBlock<dyn Fn(NonNull<NSArray<NSValue>>)>,
)
Available on crate features UIWritingToolsCoordinatorContext
and block2
only.
unsafe fn writingToolsCoordinator_requestsSingleContainerSubrangesOfRange_inContext_completion( &self, writing_tools_coordinator: &UIWritingToolsCoordinator, range: NSRange, context: &UIWritingToolsCoordinatorContext, completion: &DynBlock<dyn Fn(NonNull<NSArray<NSValue>>)>, )
UIWritingToolsCoordinatorContext
and block2
only.Asks the delegate to divide the specified range of text into the separate containers that render that text.
- Parameters:
- writingToolsCoordinator: The coordinator object requesting information from your custom view.
- range: The range of text to consider in the specified
context
object. The location value of this range is relative to the beginning of the text in your context object, and it’s your responsibility to match that location to the correct location in your text storage. If you initialized the context object with the entire contents of your view’s text storage, you can userange
as-is to access that text storage. However, if you initialized the context object with only a portion of your view’s text, add the starting location of your context object’s text to this value to get the correct range for that text storage. - context: The context object that contains the text to consider. Use this object to locate the appropriate text storage object for your view.
- completion: A completion handler to execute when you are done. The handler
has no return value and takes an array of
<doc
://com.apple.documentation/documentation/foundation/nsvalue>
types, each of which contains an
<doc
://com.apple.documentation/documentation/foundation/nsrange>.
The union of the ranges you pass to this handler must equal all of the
text in
range
. The order of the ranges in the array must be sequential, with each new range’s starting location coming after the previous one. There must also not be any gaps or overlap between ranges. You must call this handler at some point during your implementation.
If your view uses multiple NSTextContainer
objects to draw text in different
regions, use this method to tell Writing Tools about the containers that display
the specified text. In your implementation, subdivide range
to create one new
range for each portion of text that resides in a different container object.
For example, if the text in range
is split between two containers, provide
two new
<doc
://com.apple.documentation/documentation/foundation/nsrange> types
that reflect the portion of the total text in each container. If range
resides completely
within one container, call the completion handler with range
as the only value
in the array.
When configuring animations for your view, Writing Tools asks your delegate to
provide separate previews for each of your view’s container object. Specifically,
it calls your delegate’s writingToolsCoordinator(_:requestsPreviewFor:range:context:completion:)
method separately for each range of text you return in the completion handler.
Your implementation of that method must create a preview suitable for animating
the content from the underlying text container.
Sourceunsafe fn writingToolsCoordinator_requestsDecorationContainerViewForRange_inContext_completion(
&self,
writing_tools_coordinator: &UIWritingToolsCoordinator,
range: NSRange,
context: &UIWritingToolsCoordinatorContext,
completion: &DynBlock<dyn Fn(NonNull<UIView>)>,
)
Available on crate features UIResponder
and UIView
and UIWritingToolsCoordinatorContext
and block2
only.
unsafe fn writingToolsCoordinator_requestsDecorationContainerViewForRange_inContext_completion( &self, writing_tools_coordinator: &UIWritingToolsCoordinator, range: NSRange, context: &UIWritingToolsCoordinatorContext, completion: &DynBlock<dyn Fn(NonNull<UIView>)>, )
UIResponder
and UIView
and UIWritingToolsCoordinatorContext
and block2
only.Asks the delegate to provide a decoration view for the specified range of text.
- Parameters:
- writingToolsCoordinator: The coordinator object requesting information from your custom view.
- range: The range of text to consider in the specified
context
object. The location value of this range is relative to the beginning of the text in your context object, and it’s your responsibility to match that location to the correct location in your text storage. If you initialized the context object with the entire contents of your view’s text storage, you can userange
as-is to access that text storage. However, if you initialized the context object with only a portion of your view’s text, add the starting location of your context object’s text to this value to get the correct range for that text storage. - context: The context object that contains the text to consider. Use this object to locate the appropriate text storage object for your view.
- completion: A completion handler to execute when you are done. The handler
has no return value and takes a
UIView
object as a parameter. You must call this handler at some point during your implementation.
If your view uses multiple NSTextContainer
objects to draw text in different
regions, use this method to provide Writing Tools with the view to use for the
specified range of text. After calling your delegate’s writingToolsCoordinator(_:requestsSingleContainerSubrangesOf:in:completion:)
method, Writing Tools calls this method for each subrange of text you provided.
Find or provide a view situated visibly below the specified text in your text
view. It’s also satisfactory to provide a view that’s visually in front of the
text. Writing Tools uses the provided view to host any proofreading marks for
the specified range of text.
If your view has only one text container, use the coordinator’s UIWritingToolsCoordinator/decorationContainerView
property to specify the view to use for proofreading marks.
Sourceunsafe fn writingToolsCoordinator_willChangeToState_completion(
&self,
writing_tools_coordinator: &UIWritingToolsCoordinator,
new_state: UIWritingToolsCoordinatorState,
completion: &DynBlock<dyn Fn()>,
)
Available on crate feature block2
only.
unsafe fn writingToolsCoordinator_willChangeToState_completion( &self, writing_tools_coordinator: &UIWritingToolsCoordinator, new_state: UIWritingToolsCoordinatorState, completion: &DynBlock<dyn Fn()>, )
block2
only.Notifies your delegate of relevant state changes when Writing Tools is running in your view.
- Parameters:
- writingToolsCoordinator: The coordinator object providing information to your custom view.
- state: The new state for the Writing Tools session. For information
about the possible states, see
UIWritingToolsCoordinator/State
. - text: The current text for your context object.
- reason: The reason for the state change.
- context: The context object that contains the original text for Writing Tools to evaluate.
- completion: A handler to execute when your delegate finishes processing the change of state. The handler has no parameters or return value. You must call this handler at some point during the implementation of your method.
Use state transitions to perform actions related to your view or text storage.
When Writing Tools is active, it updates its state to indicate what task
it’s currently performing. Writing Tools starts in the UIWritingToolsCoordinator/State/inactive
state and moves to other states as it presents UI and starts interacting with
your view’s content. For example, it moves to the UIWritingToolsCoordinator/State/interactiveStreaming
state when it’s making changes to your view’s text storage.
Sourceunsafe fn writingToolsCoordinator_requestsRangeInContextWithIdentifierForPoint_completion(
&self,
writing_tools_coordinator: &UIWritingToolsCoordinator,
point: CGPoint,
completion: &DynBlock<dyn Fn(NSRange, NonNull<NSUUID>)>,
)
👎Deprecated: In iOS 18.4 and later and visionOS 2.4 and later, UIWritingToolsCoordinator automatically determines the location of the character at the specified point in your view’s coordinate system and no longer calls this method.Available on crate features block2
and objc2-core-foundation
only.
unsafe fn writingToolsCoordinator_requestsRangeInContextWithIdentifierForPoint_completion( &self, writing_tools_coordinator: &UIWritingToolsCoordinator, point: CGPoint, completion: &DynBlock<dyn Fn(NSRange, NonNull<NSUUID>)>, )
block2
and objc2-core-foundation
only.Asks the delegate to provide the location of the character at the specified point in your view’s coordinate system.
- Parameters:
- writingToolsCoordinator: The coordinator object requesting information from your custom view.
- point: A point in your view’s coordinate space. Find the location of the text under this point, if any.
- completion: A handler to execute with the required information.
This handler has no return value and takes an
<doc
://com.apple.documentation/documentation/foundation/nsrange>
and
<doc
://com.apple.documentation/documentation/foundation/uuid>
as parameters. Set the range to the character’s location in one of your
UIWritingToolsCoordinator/Context
objects, which you specify using the <doc ://com.apple.documentation/documentation/foundation/uuid> parameter. You must call this handler at some point during your method’s implementation.
When someone interacts with your view during a proofreading operation, Writing Tools
calls this method to get the location of the interaction. If the interaction
occurs in the text of one of your UIWritingToolsCoordinator/Context
objects,
configure an
<doc
://com.apple.documentation/documentation/foundation/nsrange>
with the character’s location in that context object and a length of 1
. If
the interaction occurs outside of the text of your context objects, configure
the range with a location of NSNotFound
.
When specifying the location of a character in your context object, provide a
location relative to the start of your context object’s text. The first character
in a context object’s text is always at location 0
, and it’s your responsibility
to track the location of the context object’s text in your text storage object.
When the context object’s text begins in the middle of your text storage,
subtract the starting location of the context object’s text from the location
you specify in your range value. For example, if the context object’s text
starts at character 100
in your text storage, and an interaction occurs
with the character at location 102
, specify a range with a location of
2
and a length of 1
.