2012-05-18 145 views
1

我在我的tableview中有一個自定義單元格,當顯示鍵盤時,我的一些單元格隱藏在鍵盤後面。鍵盤隱藏自定義單元格

要解決這個問題,我已經嘗試如下

- (void) textFieldDidBeginEditing:(UITextField *)textField { 
    CustomCell *cell = (CustomCell*) [[textField superview] superview]; 

    NSIndexPath *indexPath = [self.mySmlMsgTemplatesTbl indexPathForCell:cell]; 
    [self.mySmlMsgTemplatesTbl scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES]; 


    // [self.mySmlMsgTemplatesTbl scrollToRowAtIndexPath:[self.mySmlMsgTemplatesTbl indexPathForCell:cell] atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
} 

但它似乎沒有工作...

請幫我

+0

有人請求幫助 – user198725878

回答

1

你應該嘗試下面的代碼,如下所示。我沒有嘗試,但它應該工作。

- (void)textFieldDidBeginEditing:(UITextField *)textField{ 
    CGPoint point = [self.tableView convertPoint:yourtextview.bounds.origin fromView:yourtextview]; 
    NSIndexPath* path = [self.tableView indexPathForRowAtPoint:point]; 
    [self.tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
} 

希望,這將幫助你......

+0

Upto 4行按預期工作,但不是5,6,7等。請讓我知道 – user198725878

+0

我認爲它應該工作。你在4排後檢查有什麼不同嗎?請檢查你的代碼並做出一些事情,因爲我需要開發一個示例應用程序來做到這一點,並且你已經擁有了它。所以找出一些阻止你的東西。 – Nit

1

如果是例如最後一個單元格,這是行不通的。 tableview不能滾動那麼遠。您將需要調整tableview框架的大小或使用它的contentInset屬性來調整它的大小。

0

還有另一種方式。您可以嘗試將整個視圖上下移動。

希望這將有助於

#define  kOFFSET_FOR_KEYBOARD 200.0 


- (BOOL)textFieldShouldBeginEditing:(UITextField*)textField { 
    [txtField addTarget:self action:@selector(setViewMovedUp:)forControlEvents:UIControlEventEditingDidBegin]; 
    [txtField addTarget:self action:@selector(setViewMovedDown:)forControlEvents:UIControlEventEditingDidEndOnExit]; 
} 

-(void)setViewMovedUp:(id)sender 
{ 
if (isKeyboardAppeared) { 
    return; 
} 

isKeyboardAppeared = YES; 

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.3]; // if you want to slide up the view 

CGRect rect = self.view.frame; 

rect.origin.y -= kOFFSET_FOR_KEYBOARD; 
rect.size.height += kOFFSET_FOR_KEYBOARD; 

self.view.frame = rect; 
[UIView commitAnimations]; 
} 

-(void)setViewMovedDown:(id)sender 
{ 
[self actionSaveRegistration]; 
if (!isKeyboardAppeared) { 
    return; 
} 

isKeyboardAppeared = NO; 

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.3]; 

CGRect rect = self.view.frame; 

rect.origin.y += kOFFSET_FOR_KEYBOARD; 
rect.size.height -= kOFFSET_FOR_KEYBOARD; 

self.view.frame = rect; 

[UIView commitAnimations]; 
} 
0

我做這個類型的應用程序,你只需要textFieldname或文本框的標籤..和你可以pgive標籤與visiblecell到文本框...

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{ 

    if(textField.tag==3) 
    { 
     tableview.frame=CGRectMake(tableview.frame.origin.x, tableview.frame.origin.y-40,tableview.frame.size.width , tableview.frame.size.height+40); 

    } 
    else if(textField.tag==4) 
    { 
     tableview.frame=CGRectMake(tableview.frame.origin.x, tableview.frame.origin.y-40,tableview.frame.size.width , tableview.frame.size.height+40); 
    } 

} 

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    if(textField.tag==3) 
    { 
     tableview.frame=CGRectMake(0,0, 320,460); 
     //tableview.frame=CGRectMake(tableview.frame.origin.x, tableview.frame.origin.y+70,tableview.frame.size.width , tableview.frame.size.height-70); 
    } 
    else if(textField.tag==4) 
    { 
     tableview.frame=CGRectMake(0,0, 320,460); 
     //tableview.frame=CGRectMake(tableview.frame.origin.x, tableview.frame.origin.y+70,tableview.frame.size.width , tableview.frame.size.height-70);  
    } 
} 
- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    [textField resignFirstResponder]; 
    if(textField.tag==3) 
    { 
     tableview.frame=CGRectMake(0,0, 320,460); 
     //scrollview.frame=CGRectMake(tableview.frame.origin.x, tableview.frame.origin.y+70,tableview.frame.size.width , tableview.frame.size.height-70); 
    } 
    else if(textField.tag==4) 
    { 
     tableview.frame=CGRectMake(0,0, 320,460); 
     //tableview.frame=CGRectMake(scrollview.frame.origin.x, tableview.frame.origin.y-70,tableview.frame.size.width , tableview.frame.size.height+70); 
    } 

} 

我在這裏使用的scrollView註冊表單不是你想要的完美代碼,但我認爲你可以從這個代碼獲得想法... 希望,這對你有所幫助.. :)