2011-07-13 86 views
0

如何在iPhone中触发完成按钮触摸?在iPhone中触发完成按钮触摸

我有一个异步任务,弹出我小tableView(将其添加到子视图)。当我的一个textField被关注时 - 显示键盘并覆盖我的tableView。

我试着在“textFieldShouldBeginEditing”中调用resignFirstResponder对焦点textField,但它没有帮助。所以我认为可能明确触发完成按钮将工作。

+0

触发按钮按钮从来没有必要,它不会做任何你不能在代码中自己做的事情。另外,你的问题对我来说有点不清楚(可能只是我,对不起)。你是否想要辞职键盘,或者你是否试图移动键盘,使其不在tableView的方式? – sosborn

+0

我正在尝试辞职键盘。 – Misha

+0

http://stackoverflow.com/questions/274319/how-do-you-dismiss-the-keyboard-when-editing-a-uitextfield – sosborn

回答

0

无论何时文本字段被聚焦,您都可以为视图的整个框架设置动画,以便它向上滑动并显示表格以及文本字段而不受任何阻碍。

+0

你能告诉我一个这样做的代码吗? – Misha

0

您可以将完成按钮作为视图控制器的右导航按钮。

UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStylePlain target:self action:@selector(doneButtonPressed:)];   
    self.navigationItem.rightBarButtonItem = doneButton ; 
    [doneButton release]; 

执行doneButtonPressed:方法如下。

-(void) doneButtonPressed:(id) sender 
{ 
    [myTextField resignFirstResponder]; 
} 
+0

我有很多的textFields。如何知道doneButtonPressed调用哪一个是活动的。顺便说一下,我输入textFieldShouldBeginEditing方法时保存了textField。当我的tableView强化我为这个字段调用resignFirstResponder,它不起作用。 – Misha

0

如果您不希望文本字段becomeFirstResponder或进行编辑,从textFieldShouldBeginEditing方法返回NO

0

我从你的问题中了解到,当你在文本框中输入时,你的其他字段会被隐藏起来。为此,你需要为视图设置动画。我将为你编写代码。

在你的头文件中声明这个。

CGFloat animatedDistance; 

而在你的.m文件把这段代码,你会不会面临当你开始编辑文本字段,以便使空间来查看您的字段的任何problem.Your视图会自动向上和向下滚动。 。

#pragma mark - 
#pragma mark (Text Field Delegate Method) 
- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    [textField resignFirstResponder]; 
    return YES; 
} 


-(void)textFieldDidBeginEditing:(UITextField *)textField 
{ 

    static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3; 
    static const CGFloat MINIMUM_SCROLL_FRACTION = 0.2; 
    static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.8; 
    static const CGFloat PORTRAIT_KEYBOARD_HEIGHT = 216; 
    static const CGFloat LANDSCAPE_KEYBOARD_HEIGHT = 162; 

    CGRect textFieldRect; 
    CGRect viewRect; 

    textFieldRect =[addProScrollView.window convertRect:textField.bounds fromView:textField]; 
    viewRect =[addProScrollView.window convertRect:addProScrollView.bounds fromView:addProScrollView]; 


    CGFloat midline = textFieldRect.origin.y + 0.5 * textFieldRect.size.height; 
    CGFloat numerator = midline - viewRect.origin.y - MINIMUM_SCROLL_FRACTION * viewRect.size.height; 
    CGFloat denominator = (MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION) * viewRect.size.height; 
    CGFloat heightFraction = numerator/denominator; 

    if (heightFraction < 0.0) 
    { 
     heightFraction = 0.0; 
    } 
    else if (heightFraction > 1.0) 
    { 
     heightFraction = 1.0; 
    } 

    UIInterfaceOrientation orientation =[[UIApplication sharedApplication] statusBarOrientation]; 
    if (orientation == UIInterfaceOrientationPortrait ||orientation == UIInterfaceOrientationPortraitUpsideDown) 
    { 
     animatedDistance = floor(PORTRAIT_KEYBOARD_HEIGHT * heightFraction); 
    } 
    else 
    { 
     animatedDistance = floor(LANDSCAPE_KEYBOARD_HEIGHT * heightFraction); 
    } 

    CGRect viewFrame; 

    viewFrame= addProScrollView.frame; 
    viewFrame.origin.y -= animatedDistance; 


    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION]; 

    [addProScrollView setFrame:viewFrame]; 

    [UIView commitAnimations]; 

} 

-(void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    if(textField.tag==0) 
    { 
     static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3; 
     CGRect viewFrame; 

     viewFrame= addProScrollView.frame; 
     viewFrame.origin.y += animatedDistance; 

     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationBeginsFromCurrentState:YES]; 
     [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION]; 


     [addProScrollView setFrame:viewFrame]; 
     [UIView commitAnimations]; 



    } 
} 

就是这样。你现在就完成了运行你的代码。

干杯......