PlaceholderTextView, textviewplaceholder

Source: Internet
Author: User

PlaceholderTextView, textviewplaceholder

PlaceholderTextView

 

Effect

 

Source code

PlaceholderTextView for https://github.com/YouXianMing/UI-Component-Collection

/// PlaceholderTextView. h // PlaceholderTextView /// Created by YouXianMing on 16/7/18. // Copyright©2016 YouXianMing. all rights reserved. // # import <UIKit/UIKit. h> @ class PlaceholderTextView; @ protocol PlaceholderTextViewDelegate <NSObject> @ optional/*** Asks the delegate if editing shold begin the specified text view. ** @ param textView PlaceholderTextView's object. ** @ return YEStrue if an editing session shocould be initiated; otherwise, NOfalse to disallow editing. */-(BOOL) placeholderTextViewShouldBeginEditing :( PlaceholderTextView *) textView;/*** Asks the delegate if editing shoshould stop in the specified text view. ** @ param textView PlaceholderTextView's object. ** @ return YEStrue if editing shoshould stop; otherwise, NOfalse if the editing session shoshould continue */-(BOOL) placeholderTextViewShouldEndEditing :( PlaceholderTextView *) textView; /*** Tells the delegate that editing of the specified text view has begun. ** @ param textView PlaceholderTextView's object. */-(void) placeholderTextViewDidBeginEditing :( PlaceholderTextView *) textView;/*** Tells the delegate that editing of the specified text view has ended. ** @ param textView PlaceholderTextView's object. */-(void) placeholderTextViewDidEndEditing :( PlaceholderTextView *) textView;/*** Asks the delegate whether the specified text shocould be replaced in the text view. ** @ param textView PlaceholderTextView's object. ** @ return YEStrue if the old text shocould be replaced by the new text; NOfalse if the replacement operation shocould be aborted. */-(BOOL) placeholderTextShouldChangeText :( PlaceholderTextView *) textView; @ end @ interface PlaceholderTextView: UIView/*** PlaceholderTextView's delegate. */@ property (nonatomic, weak) id <PlaceholderTextViewDelegate> delegate;/*** Current string. * // @ property (nonatomic, strong, readonly) NSString * currentString; # pragma mark-UITextView related. /*** The TextView. */@ property (nonatomic, strong, readonly) UITextView * textView;/*** The textView's containerInset. * // @ property (nonatomic) UIEdgeInsets textContainerInset; # pragma mark-Placeholder related. /*** Placeholder attributed string. */@ property (nonatomic, strong) NSAttributedString * attributedPlaceholder;/*** PlaceHorderString gap from left. * // @ property (nonatomic) CGFloat placeHorderLeftEdge;/*** PlaceHorderString gap from top. * // @ property (nonatomic) CGFloat placeHorderTopEdge; # pragma mark-PlaceholderTextView's event. /*** PlaceholderTextView resign first responder. */-(void) placeholderTextViewResignFirstResponder;/*** PlaceholderTextView become first responder. */-(void) placeholderTextViewbecomeFirstResponder; @ end
/// PlaceholderTextView. m // PlaceholderTextView /// Created by YouXianMing on 16/7/18. // Copyright©2016 YouXianMing. all rights reserved. // # import "PlaceholderTextView. h "@ interface PlaceholderTextView () <UITextViewDelegate> @ property (nonatomic, strong) UITextField * textField; @ property (nonatomic, strong) UITextView * textView; @ property (nonatomic, strong) NSString * currentString; @ end @ implementation PlaceholderTextView # pragma mark-Frame related method. -(void) layoutSubviews {[super layoutSubviews]; self. textView. frame = self. bounds; [self resetPlaceHorderFrame];}-(instancetype) initWithFrame :( CGRect) frame {if (self = [super initWithFrame: frame]) {self. textField = [[UITextField alloc] init]; self. textField. enabled = NO; self. textField. textColor = [UIColor clearColor]; [self addSubview: self. textField]; self. textView = [[UITextView alloc] initWithFrame: self. bounds]; self. textView. delegate = self; self. textView. backgroundColor = [UIColor clearColor]; self. textView. textColor = [UIColor grayColor]; [self addSubview: self. textView];} return self;} # pragma mark-FirstResponder related. -(void) placeholderTextViewResignFirstResponder {[self. textView resignFirstResponder];}-(void) placeholderTextViewbecomeFirstResponder {[self. textView becomeFirstResponder] ;}# pragma mark-UITextViewDelegate-(BOOL) textView :( UITextView *) textView details :( nsange) range replacementText :( NSString *) text {NSString * currentText = [textView. text stringByReplacingCharactersInRange: range withString: text]; self. textField. text = currentText; self. currentString = currentText; if (self. delegate & [self. delegate respondsToSelector: @ selector (placeholderTextShouldChangeText :)]) {return [self. delegate placeholderTextShouldChangeText: self];} else {return YES;}-(BOOL) textViewShouldBeginEditing :( UITextView *) textView {if (self. delegate & [self. delegate respondsToSelector: @ selector (placeholderTextViewShouldBeginEditing :)]) {return [self. delegate placeholderTextViewShouldBeginEditing: self];} else {return YES;}-(BOOL) textViewShouldEndEditing :( UITextView *) textView {if (self. delegate & [self. delegate respondsToSelector: @ selector (placeholderTextViewShouldEndEditing :)]) {return [self. delegate placeholderTextViewShouldEndEditing: self];} else {return YES;}-(void) textViewDidBeginEditing :( UITextView *) textView {if (self. delegate & [self. delegate respondsToSelector: @ selector (placeholderTextViewDidBeginEditing :)]) {[self. delegate placeholderTextViewDidBeginEditing: self] ;}}- (void) textViewDidEndEditing :( UITextView *) textView {if (self. delegate & [self. delegate respondsToSelector: @ selector (placeholderTextViewDidEndEditing :)]) {[self. delegate placeholderTextViewDidEndEditing: self] ;}# pragma mark-PlaceHorder related-(void) resetPlaceHorderFrame {self. textField. attributedPlaceholder = _ attributedPlaceholder; [self. textField sizeToFit]; CGRect newFrame = self. textField. frame; newFrame. origin. x = _ placeHorderLeftEdge; newFrame. origin. y = _ placeHorderTopEdge; self. textField. frame = newFrame;} # pragma mark-Setter & Getter-(void) setTextContainerInset :( UIEdgeInsets) textContainerInset {_ textContainerInset = textContainerInset; _ textView. textContainerInset = textContainerInset;}-(void) Progress :( CGFloat) placeHorderLeftEdge {_ progress = progress; [self resetPlaceHorderFrame];}-(void) setPlaceHorderTopEdge :( CGFloat) placeHorderTopEdge {_ placeHorderTopEdge = placeHorderTopEdge; [self increment];}-(void) Increment :( NSAttributedString *) attributedPlaceholder {_ attributedPlaceholder = increment; [self increment];} @ end
/// PlaceholderTextView + ConvenientSetup. h // PlaceholderTextView /// Created by YouXianMing on 16/7/18. // Copyright©2016 YouXianMing. all rights reserved. // # import "PlaceholderTextView. h "@ interface PlaceholderTextView (ConvenientSetup)/*** PlaceholderTextView's placeholderString setup. ** @ param string The placeholderString. * @ param font Font. * @ param color Color. * @ param leftEdge Gap from left. * @ param topEdge Gap from top. */-(void) placeholderString :( NSString *) string font :( UIFont *) font color :( UIColor *) color leftEdge :( CGFloat) leftEdge topEdge :( CGFloat) topEdge; /*** PlaceholderTextView's textView setup. ** @ param font Font. * @ param color Color. * @ param containerInset TextContainerInset. */-(void) textViewFont :( UIFont *) font color :( UIColor *) color containerInset :( UIEdgeInsets) containerInset;/*** Create the InputAccessoryView with the specified heigh. ** @ param height The view's height. ** @ return InputAccessoryView. */-(UIView *) createInputAccessoryViewWithViewHeight :( CGFloat) height; @ end
/// PlaceholderTextView + ConvenientSetup. m // PlaceholderTextView /// Created by YouXianMing on 16/7/18. // Copyright©2016 YouXianMing. all rights reserved. // # import "PlaceholderTextView + ConvenientSetup. h "@ implementation events (ConvenientSetup)-(void) placeholderString :( NSString *) string font :( UIFont *) font color :( UIColor *) color leftEdge :( CGFloat) leftEdge topEdge :( CGFloat) topEdge {vertex (string); NSParameterAssert (font); NSParameterAssert (color); NSString * placeHorderString = string; optional * attributeString = [[delealloc] initWithString: placeHorderString]; [attributeString addattriange: NSFontAttributeName value: font range: NSMakeRange (0, placeHorderString. length)]; [attributeString addattriange: NSForegroundColorAttributeName value: color range: NSMakeRange (0, placeHorderString. length)]; self. placeHorderLeftEdge = leftEdge; self. placeHorderTopEdge = topEdge; self. attributedPlaceholder = attributeString;}-(void) textViewFont :( UIFont *) font color :( UIColor *) color containerInset :( UIEdgeInsets) containerInset {self. textView. font = font; self. textView. textColor = color; self. textContainerInset = containerInset;}-(UIView *) rows :( CGFloat) height {UIView * inputAccessoryView = [[UIView alloc] initWithFrame: CGRectMake (0, 0, [UIScreen mainScreen]. bounds. size. width, height)]; inputAccessoryView. backgroundColor = [UIColor clearColor]; self. textView. inputAccessoryView = inputAccessoryView; return inputAccessoryView;} @ end
/// ViewController. m // PlaceholderTextView /// Created by YouXianMing on 16/7/18. // Copyright©2016 YouXianMing. all rights reserved. // # import "ViewController. h "# import" PlaceholderTextView. h "# import" PlaceholderTextView + ConvenientSetup. h "@ interface ViewController () <PlaceholderTextViewDelegate> {PlaceholderTextView * _ textView;} @ end @ implementation ViewController-(void) viewDidLoad {[super viewDidLoad]; UIColor * grayColor = [UIColor grayColor]; UIColor * textColor = [UIColor blackColor] c OlorWithAlphaComponent: 0.95f]; UIColor * whiteColor = [UIColor whiteColor]; UIFont * font_16 = [UIFont systemFontOfSize: 16.f]; // Add UITapGestureRecognizer. UITapGestureRecognizer * tapGesture = [[UITapGestureRecognizer alloc] initWithTarget: self action: @ selector (gestureEvent)]; [self. view addGestureRecognizer: tapGesture]; // Create PlaceholderTextView. _ textView = [[PlaceholderTextView alloc] initW IthFrame: CGRectMake (0, 20,320,180)]; _ textView. layer. borderWidth = 0.5f; _ textView. delegate = self; [self. view addSubview: _ textView]; // Set placeholderString. [_ textView placeholderString: @ "Enter your rating (less than 50 words)" font: font_16 color: grayColor leftEdge: 19.f topEdge: 15.f]; // Set textView. [_ textView textViewFont: font_16 color: textColor containerInset: UIEdgeInsetsMake (15.f, 15.f, 15.f, 15.f)]; // Create InputAccessoryView. UIView * inputAccessoryView = [_ textView createInputAccessoryViewWithViewHeight: 40.f]; inputAccessoryView. backgroundColor = grayColor; // Setup inputAccessoryView. UIButton * button = [[UIButton alloc] initWithFrame: inputAccessoryView. bounds]; button. titleLabel. font = [UIFont systemFontOfSize: 14.f]; [button setTitle: @ "OK" forState: UIControlStateNormal]; [button setTitleColor: whit EColor forState: UIControlStateNormal]; [button setTitleColor: [whiteColor colorWithAlphaComponent: 0.5f] forState: Unknown]; [button addTarget: self action: @ selector (SUCCESS) forControlEvents: Success]; [inputAccessoryView addSubview: button] ;}# pragma mark-Event related. -(void) inputAccessoryViewEvent {[_ textView placeholderTextViewResignFirstResp Onder];}-(void) gestureEvent {[self. view endEditing: YES] ;}# pragma mark-PlaceholderTextViewDelegate-(BOOL) placeholderTextShouldChangeText :( PlaceholderTextView *) textView {NSLog (@ "-- >%@", textView. currentString); BOOL result; textView. currentString. length> = 50? (Result = NO): (result = YES); return result;}-(BOOL) values :( PlaceholderTextView *) textView {NSLog (@ "placeholderTextViewShouldBeginEditing"); return YES ;} -(BOOL) placeholderTextViewShouldEndEditing :( PlaceholderTextView *) textView {NSLog (@ "placeholderTextViewShouldEndEditing"); return YES;}-(void) implements :( PlaceholderTextView *) textView {NSLog (@ "prop");}-(void) placeholderTextViewDidEndEditing :( PlaceholderTextView *) textView {NSLog (@ "placeholderTextViewDidEndEditing");} # pragma mark-System method. -(void) viewDidAppear :( BOOL) animated {[super viewDidAppear: animated]; [_ textView placeholderTextViewbecomeFirstResponder];} @ end

 

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.