Navigate from UITextField to UITextView - ios

I have 1 problem when i click button "Next" of keypard to move cursor from TextField to TextView
The first ,all is ok. But in the second , the cursor jump into the line second of textView and then every time i click Next from TextField, the cursor in TextView will down one line more.

Well, the question seems to be an intresting one. In most of the cases, the cursor jump is from one TextField to another TextField. Here you need to jump the editing from one TextField to another TextView, so you can try this method:
First create outlets for your textView and TextField, in your viewcontroller.h, say
#property (strong, nonatomic) IBOutlet UITextView *textView;
#property (strong, nonatomic) IBOutlet UITextField *textField;
and viewcontroller.m do this:
-(BOOL) textFieldShouldReturn:(UITextField *)textField
{
if(textField isFirstResponder)
{
[textField resignFirstResponder];
[textView becomeFirstResponder];
}
return YES;
}
EDIT :
If the method don't work as expected, this will make the change:
'
-(BOOL) textFieldShouldReturn:(UITextField *)textField
{
if(textField isFirstResponder)
{
[textField resignFirstResponder];
[textview performSelector:#selector(becomeFirstResponder) withObject:nil afterDelay:0.0];
}
return YES;
}
(To be honest, I have no idea how this performSelector with 0 delay solved the issue, but the solution worked for the OP .Thanks Luong Anh for the comment.)

you only need to put [yourtextView becomeFirstResponder];
in your textFieldShouldReturn method.

Related

resignFirstResponder with Text Field is not working

I have four UITextFields and associated each with an outlet in .h files. I have also defined 4 dismiss function for each textfield as shown below:
- (IBAction)dismiss1:(id)sender;
- (IBAction)dismiss2:(id)sender;
- (IBAction)dismiss3:(id)sender;
- (IBAction)dismiss4:(id)sender;
#property (strong, nonatomic) IBOutlet UITextField *name;
#property (strong, nonatomic) IBOutlet UITextField *email;
#property (strong, nonatomic) IBOutlet UITextField *weight;
#property (strong, nonatomic) IBOutlet UITextField *age;
Implementation of dismiss function in the .m file:
- (IBAction)dismiss1:(id)sender {
[sender resignFirstResponder];
}
- (IBAction)dismiss2:(id)sender {
[sender resignFirstResponder];
}
...
I am very sure that the outlet is connected to each UITextFiled correctly. The IBAction of each dismiss function is also connected with 'Editing did end' event correspondingly. However, when I ran the app using simulator, the keyboard will not dismiss when I click 'Enter/Done'. It's also very weird that when I place the breakpoint inside the dismiss function, clicking 'Enter' when typing in the corresponding UITextField does not bring up the debugger.
Thanks a lot for helping!
Update: I checked the object type of sender (dismiss1) using breakpoint and it's UITextFiled. However, I did not entered the debugging mode when I click 'Enter' in the first TextField, but entered the debugging mode when I click on the second TextField (before typing).
set UITextFielDelegate
textfieldname.delegate = self;
use this code it will resolve your issue
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
Use the code to resign keyBoard without specify textFiled name.
- (IBAction)dismiss1:(UITextField*)sender {
[self.view endEditing:true];
// or use [sender resignFirstResponder];
}
Add text field delegate
name.delegate = self;
email.delegate = self;
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
No need to create four actions for textfield
You can set delegate of Textfield and use following method
- (void)textFieldDidEndEditing:(UITextField *)textField
Inside this method you can compare your textfield with method returning textfield and get you task done in "if" condition
Hope it help you!!
Assign the tag to different textfields
then >
textfield.delegate = self;
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
if(textfield.tag==num)
{
[textField resignFirstResponder];
}
return YES;
}
The Editing did end is called when a textfield did lose the "focus", mean it is not the first responder any more (because it has resigned or an other one became first responder).
Use textFieldShouldReturn to detect when the return key is called.
And call resignFirstResponder on the texfield when this is called. The Editing did end event will occur after that.
Edit : you have to implement something (Your ViewController?) as delegate of the textfield.

resignFirstResponder Not Responding

I have a text field named "fieldPassword" declared as an IBOutlet
#property (strong, nonatomic) IBOutlet UITextField *fieldPassword;
I synthesize it later on and then, in an attempt to have the return key dismiss the keyboard, I have:
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
fieldPassword.delegate = self;
[fieldPassword resignFirstResponder];
[self.view endEditing:YES];
return YES;
}
The problem is that when I run the simulator and hit the return key in the designated text field, nothing happens. Previously, I also had fieldPassword.delegate = self; in -viewDidLoad and that crashed the simulator with an unrecognized selector error.
Any help is much appreciated!
It should be [self.fieldPassword resignFirstResponder]; instead of [fieldPassword resignFirstResponder];
Also self.fieldPassword.delegate = self; should be in viewDidLoad or viewDidAppear
If you don't set the delegate earlier, you won't get the delegate callback. Try this in viewDidLoad:
self.fieldPassword.delegate = self;
You might have been missing the self before.
Follow the below things
1.Go to xib or storyboard where you have set that your view.
2.Right Click the TextField.If you click that you can see the
Outlets->Delegate with Empty Circle
3.Just connect with File's Owner.It is Yellow Color.
Once you do this,the circle is not empty.It is filled now.
4.Then go to declaration or .h part
#import <UIKit/UIKit.h>
#interface ViewController : UIViewController<UITextFieldDelegate>
5.Then in .m
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}

Dismiss keyboard for UITextField

I have few text fields in a UIViewController. For some of the text fields I have used IBOutlet to make property. For some textFields that I add programmatically (since they are in scroll view, they are not in the constraints of the view controller window in soryboard. ) , I have just made them property without IBOutlet.
So for example, I have:
#property (weak, nonatomic) **IBOutlet** UITextField *descriptionTextBox;
#property(strong , nonatomic) UITextField *cityTextField;
Now I set the delegates of both in ViewDidLoad & also in .h file <UITextFieldDelegate>
But after implementing - (BOOL)textFieldShouldReturn:(UITextField *)textField method , the keyboard only return for the text field having IBOutlet.What can I do for it?
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder]; //works only for text field declared in storyBoard.
return YES;
}
In your view controller, say [self.view endEditing:YES]. This will dismiss the keyboard regardless of who is first responder.
I think it would be helpful to see more code.
However your issue could be that you're not setting the delegate on your UITextFields hence the method only being called on the one in the storyboard.
Check to see whether you have set delegate to your UITextField objects that were created programatically.

Adding UITextField input to NSMutableArray [duplicate]

This question already has answers here:
NSMutableArray addObject not working
(2 answers)
Closed 9 years ago.
I'm trying to add UITextField input into an NSMutableArray using the following IBActions, connected to the 'did end editing' part of the UITextFields:
- (IBAction) returnKey1
{
[textInputOne addTarget:self action:#selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
[textInputOne resignFirstResponder];
[players addObject:textInputOne.text];
}
- (IBAction) returnKey2
{
[textInputTwo addTarget:self action:#selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
[textInputTwo resignFirstResponder];
[players addObject:textInputTwo.text];
NSLog(#"array: %#",players);
}
and I've initialized the players array in the viewDidLoad section like so:
- (void)viewDidLoad
{
[super viewDidLoad];
players = [[NSMutableArray alloc] init];
}
but the array remains 'nil'. Anyone know how to fix this?
UITextField doesn't send any actions when the user taps Return. So you won't receive the “did end editing” action when the user taps Return.
UITextField sends “did end editing” when it resigns first responder. You can make it resign first responder when the user taps Return by setting the text field's delegate and implementing textFieldShouldReturn:. Start by finding the class extension at the top of your ViewController.m. Edit it (or add it if it's not there) to declare that the class conforms to UITextFieldDelegate:
#interface ViewController () <UITextFieldDelegate>
#property (nonatomic, strong) IBOutlet UITextField *textFieldOne;
#property (nonatomic, strong) IBOutlet UITextField *textFieldTwo;
#end
Next, implement textFieldShouldReturn: in the class to make the text field resign first responder:
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return NO;
}
Finally, in your xib, connect each text field's delegate outlet to the view controller (which is normally File's Owner).
I hope you have set the delegates to textfield properly. As you have allocated the players array in viewDidLoad try with following code
- (IBAction) returnKey1
{
[players addObject:textInputOne.text];
}
- (IBAction) returnKey2
{
[players addObject:textInputTwo.text];
}
Both returnKey1 & returnKey2 IBActions assigned to textfield did end editing events.
Now to resign the key board
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
I tried the same thing in one sample project it worked well.

ios - make keyboard disappear when UIButton is pressed

I am trying to make the keyboard disappear when a UIButton is pressed -
-(IBAction)nextButtonPressed{
[usernameTextField resignFirstResponder];
[passwordTextField resignFirstResponder];
}
I have declared the button as IBOutlet and connected it to the IBAction in the storyboard. But the code however does not work and keyboard remains visible. What am I doing wrong ?
First you need to subscribe to the UITextFieldDelegate Protocol in your View/ViewController's header file like this:
#interface YourViewController : UIViewController <UITextFieldDelegate>
Make sure you're setting your view/viewcontroller to be the UITextField's delegate after you init the textfield in the .m:
yourTextField.delegate = self;
And you can do this :
-(IBAction)nextButtonPressed{
[usernameTextField resignFirstResponder];
[passwordTextField resignFirstResponder];
}
Hope it'll help
You forgot this:
usernameTextField.delegate = self;
passwordTextField.delegate = self;

Resources