blob: a502f938e507ad35a07e252cca15f179915ec3e5 [file]
/*
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>
#import "MDCTextInput.h"
@class MDCIntrinsicHeightTextView;
@protocol MDCMultilineTextInputDelegate;
@protocol MDCMultilineTextInputLayoutDelegate;
/**
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>
/** 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).
*/
@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;
@end
/** Delegate for MDCTextInput size changes. */
@protocol MDCMultilineTextInputLayoutDelegate <NSObject>
@optional
/**
Notifies the delegate that the text field's content size changed, requiring the size provided for
best display.
If using auto layout, this method is unnecessary; this is a way for views not implementing auto
layout to know when to grow and shrink height to accomodate changes in content.
@param multilineTextField The text field for which the content size changed.
@param size The size required by the text view to fit all of its content.
*/
- (void)multilineTextField:(id<MDCMultilineTextInput> _Nonnull)multilineTextField
didChangeContentSize:(CGSize)size;
@end