2013-03-04 78 views
0

我在中添加了我的UITextFieldUITextView我无法在里面输入它们。两人都不让我允许输入这些字段。并且,在键盘按下返回时无法解除它。当UITextField和UITextview显示在UIWindow里面时,粘上键盘

-(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]; 
} 

我已经声明了两个委托方法。我在那里放置了一个断点,并进行了检查,即使尚未调用该方法。

更新 -

textFieldShouldReturn委托方法

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

回答

1

我发现,这种方法还没有被调用,因为UIWindow所以,我从here改变了我的UIWindowUIView而且,我解决了这个问题,通过使用UIView+Animation.h它提供什么需要我的动画究竟。

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

感谢Google!干杯!

+0

+1分享此问题 – swiftBoy 2013-03-06 07:26:58

+0

@RDC别客气! – Praveenkumar 2013-03-06 07:40:46

0

键盘将永远不会对自己的解雇(即使你打回!)。你会注意到,在你的委托方法中,只要你按下return/done/etc,你就会收到事件。

一个简单的方法来使键盘解雇每有人点击返回键时间是实现- (BOOL)textViewShouldEndEditing:(UITextView *)textView方法。

- (BOOL)textViewShouldEndEditing:(UITextView *)textView 
{ 
    [textView endEditing:YES]; 
    return YES; 
} 

编辑:在您的文章,你编辑说,你已经宣布双方的委托方法...有两个以上,以便你能澄清你已经实现了什么方法? http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextViewDelegate_Protocol/Reference/UITextViewDelegate.html#//apple_ref/occ/intf/UITextViewDelegate

+0

谢谢!我找到了问题并修复了它。 – Praveenkumar 2013-03-06 05:56:55

1

你应该尝试一下本作从一个UIWindow

[self.window endEditing:YES]; 

Source

+0

你能看到我更新的代码吗? 'textFieldShouldReturn'甚至没有被调用。检查断点也:( – Praveenkumar 2013-03-04 06:24:07

+0

谢谢!我发现了问题,并修复它。 – Praveenkumar 2013-03-06 05:57:42

0

取消键盘试试这个

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)]; 
    tapGesture.cancelsTouchesInView = NO; 
    [self.window addGestureRecognizer:tapGesture]; 
    //[self.view addGestureRecognizer:tapGesture]; 
    [tapGesture release]; 
} 
-(void)dismissKeyboard 
{ 
[txt resignFirstResponder]; 
[textView resignFirstResponder]; 
} 
+0

谢谢!我发现了问题,并修复它。 – Praveenkumar 2013-03-06 05:58:18

0

试试这个

这是文本框的委托方法: -

  • (BOOL)textFieldShouldReturn:(的UITextField *)的TextField

    {

    [txtview resignFirstResponder]; 
    

    返回NO;

    }

+0

谢谢!我发现了问题并修复它。 – Praveenkumar 2013-03-06 05:58:39