2011-07-13 61 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]; 



    } 
} 

就是這樣。你現在就完成了運行你的代碼。

乾杯......