blob: 87c381e670f34825325de3c2c875a36346b106a1 [file] [log] [blame]
// Copyright 2017-present the Material Components for iOS authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#import <UIKit/UIKit.h>
// TODO(b/151929968): Delete import of delegate headers when client code has been migrated to no
// longer import delegates as transitive dependencies.
#import "MaterialElevation.h"
#import "MDCMultilineTextInputLayoutDelegate.h"
#import "MDCTextInput.h"
@class MDCIntrinsicHeightTextView;
@protocol MDCMultilineTextInputDelegate;
@protocol MDCMultilineTextInputLayoutDelegate;
API_DEPRECATED_BEGIN(
"🕘 Schedule time to migrate. "
"Use branded UITextField or UITextView instead: go/material-ios-text-fields/gm2-migration. "
"This is go/material-ios-migrations#not-scriptable 🕘",
ios(12, 12))
/**
Material Design themed mutiline text field (multiline text input).
https://www.google.com/design/spec/components/text-fields.html#text-fields-multi-line-text-field
*/
@interface MDCMultilineTextField
: UIView <MDCTextInput, MDCMultilineTextInput, MDCElevatable, MDCElevationOverriding>
/** A mirror of the same property that already exists on UITextField, UITextView, and UILabel. */
@property(nonatomic, assign) BOOL adjustsFontForContentSizeCategory;
/**
Should the text field grow vertically as new lines are added.
Default is YES.
Note: Inherited from MDCMultilineTextInput protocol. Added here to declare Interface Builder
support (IBInspectable).
*/
@property(nonatomic, assign) IBInspectable BOOL expandsOnOverflow;
/**
The delegate for changes to preferred content size.
If using auto layout, it is not necessary to have a layout delegate.
*/
@property(nonatomic, nullable, weak) IBOutlet id<MDCMultilineTextInputLayoutDelegate>
layoutDelegate;
/** An optional delegate for useful methods not included in UITextViewDelegate.*/
@property(nonatomic, nullable, weak) IBOutlet id<MDCMultilineTextInputDelegate> multilineDelegate;
/**
The text string of the placeholder label.
Bringing convenience API found in UITextField to all MDCTextInputs. Maps to the .text of the
placeholder label.
Note: Inherited from MDCTextInput protocol. Added here to declare Interface Builder support
(IBInspectable).
Note: The [Design guidance](https://material.io/components/text-fields/#anatomy) changed and treats
placeholder as distinct from `label text`. The placeholder-related properties of this class most
closely align with the "label text" as described in the guidance.
*/
@property(nonatomic, nullable, copy) IBInspectable NSString *placeholder;
/** Insets used to calculate the spacing of subviews. */
@property(nonatomic, assign, readonly) UIEdgeInsets textInsets;
/**
Embedded textView. Can be set from storyboard or will be auto-created during initialization.
*/
@property(nonatomic, nullable, strong) IBOutlet MDCIntrinsicHeightTextView *textView;
/**
* Whether or not the multiline text field should use its contraints to calculate its intrinsic
* content size. Default is NO, in which case the multiline text field gives an approximate
* intrinsic content size using its subviews.
*/
@property(nonatomic) BOOL useConstraintsForIntrinsicContentSize;
/**
A block that is invoked when the @c MDCMultilineTextField receives a call to @c
traitCollectionDidChange:. The block is called after the call to the superclass.
*/
@property(nonatomic, copy, nullable) void (^traitCollectionDidChangeBlock)(
MDCMultilineTextField *_Nonnull textField, UITraitCollection *_Nullable previousTraitCollection)
;
@end
@interface MDCMultilineTextField (UIAccessibility)
/**
The default value of isAccessibilityElement for MDCMultilneTextField is false. When
isAccessibilityElement is false, the entire view is treated as a container. VoiceOver traverses
each accessibility element within MDCMultilineTextField and reads the accessibilityLabel of each
element. Since MDCMutlilineTextField acts merely as a container, setting accessibilityLabel on
MDCMultilineTextField has no effect.
If isAccessibilityElement is set to true, the entire MDCMultilineTextField is treated as one
accessibility element, as opposed to a container. The accessibilityLabel for MDCMultilineTextField
will be a computed property. The value returned will be a concatenation of accessibilityLabel of the
elements contained within the MDCMultilineTextField. If accessibilityLabel for MDCMultilineTextField
is set, the assigned value is used in place of placeholder label's accessibilityLabel when
concatenating.
*/
@property(nonatomic) BOOL isAccessibilityElement;
/**
See comments for isAccessibilityElement
*/
@property(nullable, nonatomic, copy) NSString *accessibilityLabel;
@end
API_DEPRECATED_END