blob: 2001f46ae69c0959ddc311c0422e33f4f99af69a [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>
#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