Tableview滾動到指定位置的總結


最新寫一個項目,其中某個界面需要添加了一個tableview, 分多個組,每個cell里的contentview里又加了一個textfield.

需要實現的效果:當點某個textfield時,若textfield被鍵盤遮擋,當前tableview自動滾動到彈出的鍵盤的上面。當錄入完畢,自動回到原來的位置。

我的處理方法是:建立一個CGPoit臨時變量contentoffset, 以保存當前tableview的偏移,以備錄入完畢,tableview滾回原來的位置。

 

下面是處理的代碼塊:

 

CGPoint        contentoffset;

 

#pragma mark  textfield delegate

-(void)textFieldDidBeginEditing:(UITextField *)textField

{

 

    myview.hidden=NO;

//獲取cell所在的indexpath

 

    NSIndexPath *indexpath=[table indexPathForCell:((UITableViewCell *)textField.superview.superview) ];

    //獲取當前cell在tableview中的位置

    CGRect rectintableview=[table rectForRowAtIndexPath:indexpath];

    //獲取當前cell在屏幕中的位置

    CGRect rectinsuperview=[table convertRect:rectintableview fromView:[table superview]];

    contentoffset.x=table.contentOffset.x;

    contentoffset.y=table.contentOffset.y;

    if ((rectintableview.origin.y+50-table.contentOffset.y)>200) {

        [table setContentOffset:CGPointMake(table.contentOffset.x,((rectintableview.origin.y-table.contentOffset.y)-150)+table.contentOffset.y) animated:YES];

    }

 

}

 

- (void)textFieldDidEndEditing:(UITextField *)textField

{

    myview.hidden=YES;

}

- (BOOL)textFieldShouldReturn:(UITextField *)textField

{

   

    [textField resignFirstResponder];

    [table setContentOffset:CGPointMake(contentoffset.x,contentoffset.y) animated:YES];

    return YES;

}

 

下面總結一下解決上面問題過程中學習的知識:

1,         通過textfield獲得當前cell

((UITableViewCell *)textField.superview.superview)

因為添加的時候是將textfield加到了cell的contentview里去了,所以textfield.superview實際是cell的contentview.

Contentview的superview是cell,所以textfield.superview.superview是當前textfield所在的cell.

2,通過cell獲得當前的indexpath

NSIndexPath *indexpath=[table indexPathForCell:((UITableViewCell *)textField.superview.superview) ];

3,通過cell獲得當前cell在tableview中的位置的方法

//獲取當前cell在tableview中的位置

CGRect rectintableview=[table rectForRowAtIndexPath:indexpath];

 

//獲取當前cell在屏幕中的位置

    CGRect rectinsuperview=[table convertRect:rectintableview fromView:[table superview]];

4,通過設置tableview的偏移量來滾動到目標的位置

[table setContentOffset:CGPointMake(table.contentOffset.x,((rectintableview.origin.y-table.contentOffset.y)-150)+table.contentOffset.y) animated:YES];


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM