Accepting User Text Input with UITextField

textField在Interfa Builder中不能改变高度,但是在代码中可以,无论怎么改变其高度,行数始终是1

头文件

#import <UIKit/UIKit.h>

 

@interface ViewController : UIViewController<UITextFieldDelegate>               //为了监听用户触发的事件,例如开始输入,完成输入等,text Field要有自己的代理,这个代理遵守协议

@property (nonatomic,strong) UITextField *textField;

@property (nonatomic,strong) UILabel *labelCounter;

 

@end

 

实现

#import "ViewController.h"

 

@interfaceViewController ()

 

@end

 

@implementation ViewController

 

- (void) calculateAndDisplayTextFieldLengthWithText: (NSString *) paramText {

    

    NSString *characterOrCharacters = @"characters";

    if (characterOrCharacters.length == 1) {

        characterOrCharacters = @"charater";

    }

    

    self.labelCounter.text = [NSString stringWithFormat:@"%lu %@", (unsigned long)paramText.length, characterOrCharacters];

}

 

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    BOOL result = YES;

    if ([textField isEqual:self.textField]){

        NSString *wholeText =

        [textField.textstringByReplacingCharactersInRange:range

                                                withString:string];

        [selfcalculateAndDisplayTextFieldLengthWithText:wholeText];

    }

    return result;

}

//Keyboard消失

- (BOOL)textFieldShouldReturn:(UITextField *)textField{ [textField resignFirstResponder];

    returnYES;

}

 

- (void)viewDidLoad

{

    [superviewDidLoad];

    CGRect textFieldFrame = CGRectMake(38.0f, 30.0f, 250.f, 23.f);

    self.textField = [[UITextField alloc] initWithFrame:textFieldFrame];

    self.textField.delegate = self;

    self.textField.borderStyle =UITextBorderStyleRoundedRect;

    self.textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;//默认左上

    self.textField.placeholder = @"Enter the text here…………";

    //self.textField.center = self.view.center;

    [self.view addSubview:self.textField];

    

    

    CGRect labelCounterFrame = self.textField.frame;

    labelCounterFrame.origin.y += textFieldFrame.size.height + 10;

    self.labelCounter = [[UILabel alloc] initWithFrame:labelCounterFrame];

    [self.viewaddSubview:self.labelCounter];

    

    [selfcalculateAndDisplayTextFieldLengthWithText:self.textField.text];

    UILabel *currencyLabel = [[UILabel alloc] initWithFrame:CGRectZero];

    currencyLabel.text = [[[NSNumberFormatter alloc] init] currencySymbol];

    currencyLabel.font = self.textField.font;

    [currencyLabel sizeToFit];

    self.textField.leftView = currencyLabel;

    self.textField.leftViewMode = UITextFieldViewModeWhileEditing;   //leftViewModerightViewMode两个property控制currencyLabel出现的形式,此时是用户输入text时出现

//    typedef enum { UITextFieldViewModeNever,UITextFieldViewModeWhileEditing, UITextFieldViewModeUnlessEditing, UITextFieldViewModeAlways

//    } UITextFieldViewMode;

    

}

 

- (void)didReceiveMemoryWarning

{

    [superdidReceiveMemoryWarning];

}

 

@end

                                              

Displaying Long Lines of Text with UITextView :keyboard不能将用户输入的text遮挡住

头文件

@interface ViewController : UIViewController

@property (nonatomic,strong) UITextView *myLongTextView;

 

@end

 

实现

#import "ViewController.h"

 

@interfaceViewController ()

 

@end

 

@implementation ViewController

- (void) handleKeyboardDidShow:(NSNotification *)paramNotification{

    /* Get the frame of the keyboard */

    NSValue *keyboardRectAsObject = [[paramNotification userInfo]    //userInfo是NSDictionary类型的一个属性,其中一个key                                                 是UIKeyboardFrameEndUserInfoKey,包括一个NSValue类型的keyboard的                                        boundaries,而这个boundaries放在一个CGRect中。

                                     objectForKey:UIKeyboardFrameEndUserInfoKey];

    /* Place it in a CGRect */

    CGRect keyboardRect;

    [keyboardRectAsObject getValue:&keyboardRect];

    /* Give a bottom margin to our text view that makes it reach to the top of the keyboard */

    self.myLongTextView.contentInset = UIEdgeInsetsMake(0.0f,

                                                    0.0f,

                                                    keyboardRect.

                                                    size.height,

                                                    0.0f);

}

- (void) handleKeyboardWillHide:(NSNotification *)paramNotification{

    /* Make the text view as big as the whole view again */

    self.myLongTextView.contentInset = UIEdgeInsetsZero;

}

/*在- (void) viewWillAppear:方法中开始looking for keyboard的notifications, 而在- (void) viewWillDisappear:方法中停止监听。让你的view controller停止监听是很重要的,因为当你的view controller不被display,那你不会希望接收其他的view controller引发的keyboard notifications. */

- (void) viewWillAppear:(BOOL)paramAnimated{

    [super viewWillAppear:paramAnimated];

    [[NSNotificationCenterdefaultCenter] addObserver:self

                                                      selector:@selector(handleKeyboardDidShow:)

                                                      name:UIKeyboardDidShowNotification

                                                     object:nil];

    [[NSNotificationCenterdefaultCenter] addObserver:self

                        selector:@selector(handleKeyboardWillHide:)

                    name:UIKeyboardWillHideNotification

                          object:nil];

 

    self.view.backgroundColor = [UIColorwhiteColor];

    self.myLongTextView = [[UITextViewalloc] initWithFrame:self.view.bounds];

    self.myLongTextView.text = @"Some text here...";

    self.myLongTextView.font = [UIFontsystemFontOfSize:16.0f];

    [self.viewaddSubview:self.myLongTextView];

    }

 

- (void) viewWillDisappear:(BOOL)paramAnimated{

    [super viewWillDisappear:paramAnimated];

    [[NSNotificationCenterdefaultCenter] removeObserver:self];

    }

 

@end

 

<UITextFieldDelegate> 中都是可选的方法:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField;        // return NO to disallow editing.

- (void)textFieldDidBeginEditing:(UITextField *)textField;           // became first responder

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField;          // return YES to allow editing to stop and to resign first responder status. NO to disallow the editing session to end

- (void)textFieldDidEndEditing:(UITextField *)textField;             // may be called if forced even if shouldEndEditing returns NO (e.g. view removed from window) or endEditing:YES called

 

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;   // return NO to not change text

 

- (BOOL)textFieldShouldClear:(UITextField *)textField;               // called when clear button pressed. return NO to ignore (no notifications)

- (BOOL)textFieldShouldReturn:(UITextField *)textField;              // called when 'return' key pressed. return NO to ignore.

原文地址:https://www.cnblogs.com/liuhong/p/3278624.html