iOS: UIControl in UIScrollView not registering click events - ios

I have a UIControl within a UIScrollView. I scrollview has a textfield. I want the text field to loose focus when the UIControl is touched.
This is the method the UIControl is hooked up to:
- (IBAction) clickedBackground
{
[self.view endEditing:YES]; //make the view end editing!
}
But, the UIControl doesn't seem to call this event when touched.
I did try this as suggested elsewhere, but to no avail:
[scroller setDelaysContentTouches:YES];

The touch event on your UIControl is getting conflicted with touch event of your UIScrollView.
If you just to loose focus of the text field you can use on a button tap.
[textField resignFirstResponder];
But ideal way is to loose focus when user taps anywhere outside the text field. This answer would help you to achieve this.
However, if you just want to resign the keyboard. Then make use of resignFirstResponder on a button tap. You can also look into UITextField input accessory view in order to display a button on the keyboard input view that user can tap on.

Related

How dismiss keyboard without losing focus. or at least show cursor

How dismiss keyboard without losing focus. or at least show cursor.
I have speech recognition button and textview.
User can type with keyboard or use speech recognition.
But I want to dismiss keyboard while user using speech recognition.
Currently, I am resigning responder but it hides cursor on textView.
I solved these with following steps:
1) I subclassed UIWindow and override sendEvent
Inside:
I check for tap presence and do following if view is intended one
UITextView *view=(UITextView*)touch.view;
view.input=nil;
[view reloadInputViews];
This way I ensure that on tap Keyboard will appear for my textview
2) For my speech recognition button click I do following to hide default keyboard
myview.input=[[UIView alloc]init];
[myview reloadInputViews];

End UITextView editing when tapping on a UIControl

I'm trying to end editing a UITextView when I click a UIControl on another cell.
If I tap on a cell containing the UIControl, the text view ends editing, as expected. However, when I tap on say, a UIStepper, the control responds fine but the text view continues in edit mode.
What mechanism would allow me to "catch" the tap anywhere outside the text view and allow me to exit edit mode? Thanks for the help.
You can use endEditing: method:
[self.view endEditing:YES];
In Swift:
self.view.endEditing(true)

Move cursor/focus on other textfield

I've added toolbar to the textfield and also on textfield it can show keyboard or show UIPickerView like on image
How to move cursor/focus from on textfield to other textField programmatically(Next, and Back buttons on Toolbar)?
P.S. I know how to call the method(set selector when adding UIBarButtonItem to Tool). I just need the code for moving the focus/cursor
Use the UIResponder methods -resignFirstResponder & -becomeFirstResponder on the respective UITextField objects to lose and gain focus respectively.
For example:
[nextTextField becomeFirstResponder];
To move focus to another responder you can use[textField2 becomeFirstResponder];. I can also suggest a IQKeyboardManager library which adds a similar toolbar automatically.

How can you programmatically bring up keyboard with CCTextField?

I have a CCTextField that is hidden until the user taps on an object, which then adds it to the node tree and it's visible.
Currently, the user must then tap the CCTextField to activate the iOS keyboard and begin entering text.
Is there a way to programmatically initiate the keyboard appearing ?
becomeFirstResponder isn't working.
I dug a little deeper into the CCTextField class code, and cocos2D adds the UITextField property as a subview of the cocos2d view.
For some reason though, this didn't work :
[myCCTextField.textField becomeFirstResponder];
This is what I did, and it worked :
[[CCDirector sharedDirector] view]subviews[0] becomeFirstResponder];
If you have multiple CCTextFields you are obviously going to have to determine the index of your desired text field that you'd like to edit.

How do I make the keyboard go away when the user clicks somewhere else? [duplicate]

This question already has answers here:
Closed 11 years ago.
Possible Duplicate:
Dismiss keyboard by touching background of UITableView
How do I make the keyboard go away when the user clicks somewhere else?
Note: I know how to make the keyboard disappear with sending the resignFirstResponder command to the UITextField. At present the "Done" button is connected to all the correct code to do this and this works.
I have a UITableView with different UITableViewCells, and if the user moves onto another cell I want the keyboard to disappear.
So what events do I also need to include the resignFirstResponder in, for the keyboard to disappear.
Suppose UITableViewCell A has the UITextField, and UITableViewCell B has a button. If the user presses the button in cell B, then I will need to send the command resignFirstResponder back to the UITextField in cell A. First of all the button has no idea which cell it should sent the command to, and second even if the button did know which cell to send the command to how would it?
There's no trivial way to do this. You can put a transparent set of "shield views" all the way around the text field that take up the rest of the screen, and use any touches on them to dismiss the keyboard.
You can create a generic 'hideKeyboard' method in which you can include all text fields that can be first responders. For example,
-(void) hideKeyboard {
[textFieldName resignFirstResponder];
[textFieldSurname resignFirstResponder];
for (UITextField * txtField in arrTextFields) {
[txtField resignFirstResponder];
}
}
Then, at various sections in your class, depending on the functionality required, call;
[self hideKeyBoard];
This simple method means you won't need to keep track of the individual item that 'has the focus' / first responder status.
How to touch any part of the screen to make the keyboard go away
To touch somewhere outside the UITableView and have the keyboard disappear, place an invisible button on top of the 'touch area' that you want to respond to. Then, simply call [self hideKeyboard] from the touch event for that invisible button. Using IB, drag a new rounded button onto your view, then size it to take up the full size of the screen. Next,drag the button up or down the controls list in the IB document window so that button is behind all text fields and buttons, but in front of anything else (like images etc.). Finally, change the type of the button to 'Custom' to make it invisible, but still respond to events. Now all you have to do is to connect the new button's 'touch up inside' event to trigger the 'hideKeyboard' method.
Additionally, see this post for a brilliant solution to dismiss the keyboard when the above solution doesn't work : stackoverflow question 1823317

Resources