DvixExtract
DvixExtract

Reputation: 1335

Dismiss Keyboard in one of multiple views

I have a 3 views in one screen with different components such as tables and buttons, when I try to dismiss the keyboard with the code below it doesn't dismiss when I click on the view that contains the textView( and that’s what I need! ) . However when I click on one of the other views it dismisses.

The following image shows the views that I have and the last view inside the scrollview is the one that contains the textView.

enter image description here

How can I get the keyboard to dismiss despite the view that is taped.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

UITouch * touch = [touches anyObject];

if(touch.phase == UITouchPhaseBegan) {
    [aTextField resignFirstResponder];
  }
}

also this code fails to dismiss:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

[[self view] endEditing:TRUE];

}

Upvotes: 1

Views: 81

Answers (4)

ARULMOORTHY C
ARULMOORTHY C

Reputation: 117

You need to add tap gesture in the views which you want to click: For you are using two UIViews with name Your_view1 and Your_view2, and textfields are txt1 and txt2. The code is below:

Your_view1:

UITapGestureRecognizer *singleTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTapGesture:)];
singleTapGesture.numberOfTapsRequired = 1;
[Your_view1 addGestureRecognizer:singleTapGesture];

Your_view2:

UITapGestureRecognizer *singleTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTapGesture:)];
singleTapGesture.numberOfTapsRequired = 1;
[Your_view2 addGestureRecognizer:singleTapGesture];

And the delegate is:

-(void)handleSingleTapGesture:(UITapGestureRecognizer *)singleTapGesture{
    [txt1 resignFirstResponder];
    [txt2 resignFirstResponder];
}

Upvotes: 1

Ganesh Manickam
Ganesh Manickam

Reputation: 2139

managing keyboard get most of our development time luckly we have an alternative solution with this library

No need to write multiple line of code in every viewcontroller simply add one line of code in your didFinishLaunchingWithOptions

IQKeyboardManager.sharedManager().enable = true

This will save time Hope this will help you

Upvotes: 0

trungduc
trungduc

Reputation: 12144

You should take a look at Apple document for UIScrollView.

Because a scroll view has no scroll bars, it must know whether a touch signals an intent to scroll versus an intent to track a subview in the content. To make this determination, it temporarily intercepts a touch-down event by starting a timer and, before the timer fires, seeing if the touching finger makes any movement.

That's why touchesBegan doesn't work when you click inside your scroll view.

A easy way to fix it, add a UITapGestureRecognizer for your viewController.view.

@property (nonatomic, strong) UITapGestureRecognizer *tapGestureRecognizer;

- (void)viewDidLoad {
  [super viewDidLoad];
  self.tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self.aTextField action:@selector(resignFirstResponder)];
  [self.view addGestureRecognizer:self.tapGestureRecognizer];
}

Upvotes: 0

If your textView is editable , tapping on that, will make it first responder. That’s why keyboard is not dismissing. If you don’t need edit textView, set it’s editable attribute to false

Upvotes: 0

Related Questions