2012-05-18 255 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注册表单不是你想要的完美代码,但我认为你可以从这个代码获得想法... 希望,这对你有所帮助.. :)