Search code examples
iphoneiosobjective-cuitextfielduiwindow

Dissmissing the keyboard when UITextField and UITextview displayed inside of UIWindow


I've added my UITextField and UITextView inside a UIWindow I can not able to type inside in both of them. Both are not letting me allow to type in those fields. And, can't able to dismiss it when return pressed in keyboard.

-(void)showAlert 
{
alertWindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
alertView = [[UIView alloc] initWithFrame:CGRectMake(10, 115, 300, 230)];
alertWindow.windowLevel = UIWindowLevelAlert; // puts it above the status bar
alertView.center = CGPointMake(alertWindow.frame.size.width/2, alertWindow.frame.size.height/2);
alertView.backgroundColor = [UIColor whiteColor];
alertView.layer.borderWidth = 1.0;
alertView.layer.borderColor = [[UIColor whiteColor]CGColor];

UITextField *txt = ....
....
....
txt.delegate = self;
...
...
[alertView addSubview:txt];

UITextView *txtview = ...
....
....
txtview.delegate = self;
...
[alertView addSubview:txtview];

[alertWindow addSubview:alertView];
[alertWindow addSubviewWithZoomInAnimation:alertView duration:1.0 option:curveValues[0]];
[alertWindow setHidden:NO];
}

I've declared both of the delegate methods also. I placed a breakpoint there and checked also, even that method not yet called.

Update -

textFieldShouldReturn delegate method

- (BOOL) textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    [reserveView resignFirstResponder];
    [reserveWindow resignFirstResponder];
    [self.reserveWindow endEditing:YES];
    [reserveView endEditing:YES];
    return YES;
}

Solution

  • I found, that method has not been called because of UIWindow So, i changed my UIWindow to UIView And, i fixed this issue by using UIView+Animation.h from here It provides the animation what i required exactly.

    - (void) addSubviewWithZoomInAnimation:(UIView*)view duration:(float)secs option:(UIViewAnimationOptions)option;
    - (void) removeWithZoomOutAnimation:(float)secs option:(UIViewAnimationOptions)option;
    

    Thanks to Google! Cheers!