1

テーブルビューにカスタムセルがあります。キーボードを表示すると、セルの一部がキーボードの後ろに隠れます。

この問題を修正するために、私は以下のように試しました

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

しかし、それは機能していないようです。

4

4 に答える 4

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];
}
于 2012-05-18T11:20:44.860 に答える
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];
}
于 2012-05-18T11:40:21.610 に答える
0

たとえば、それが最後のセルである場合、これは機能しません。テーブルビューはそれほど上にスクロールできません。テーブルビューフレームのサイズを変更するか、そのcontentInsetプロパティを使用してサイズを変更する必要があります。

于 2012-05-18T10:36:36.317 に答える
0

私はこのタイプのアプリを実行します。必要なのはtextFieldnameまたはtextfieldタグだけです。タグをvisiblecellを使用してtextFieldに送信できます。

- (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を使用しますが、あなたが望む完璧なコードではありませんが、このコードからアイデアを得ることができると思います...願っています、これはあなたを助けます.. :)

于 2012-05-18T11:55:26.647 に答える