Pull to refresh of tableview in the kitchen sink doesn't work

You must Login before you can answer or comment on any questions.

titanium:2.1.1 os:mac platform: iphone simulator 5.1

when i'm learning the kitchen sink example, i found it doesn't work, it never reloads the data, following is the kitchen sink table_view_pull_to_refresh code, the reason may because when i release finger, the tableview automatically scroll back to the first tablerow, which cause the pulling flag to false again.

function tv_pull() {
    var win = Ti.UI.createWindow();
 
    function formatDate()
    {
        var date = new Date();
        var datestr = date.getMonth()+'/'+date.getDate()+'/'+date.getFullYear();
        if (date.getHours()>=12)
        {
            datestr+=' '+(date.getHours()==12 ? date.getHours() : date.getHours()-12)+':'+date.getMinutes()+' PM';
        }
        else
        {
            datestr+=' '+date.getHours()+':'+date.getMinutes()+' AM';
        }
        return datestr;
    }
 
    var data = [
        {title:"Row 1"},
        {title:"Row 2"},
        {title:"Row 3"}
    ];
 
    var lastRow = 4;
 
    var tableView = Ti.UI.createTableView({
        data: data
    });
 
    win.add(tableView);
 
    var border = Ti.UI.createView({
        backgroundColor:"#576c89",
        height:2,
        bottom:0
    });
 
    var tableHeader = Ti.UI.createView({
        backgroundColor:"#e2e7ed",
        width:320,
        height:60
    });
 
    // fake it til ya make it..  create a 2 pixel
    // bottom border
    tableHeader.add(border);
 
    var arrow = Ti.UI.createView({
        backgroundImage:"/images/whiteArrow.png",
        width:23,
        height:60,
        bottom:10,
        left:20
    });
 
    var statusLabel = Ti.UI.createLabel({
        text:"Pull to reload",
        left:55,
        width:200,
        bottom:30,
        height:"auto",
        color:"#576c89",
        textAlign:"center",
        font:{fontSize:13,fontWeight:"bold"},
        shadowColor:"#999",
        shadowOffset:{x:0,y:1}
    });
 
    var lastUpdatedLabel = Ti.UI.createLabel({
        text:"Last Updated: "+formatDate(),
        left:55,
        width:200,
        bottom:15,
        height:"auto",
        color:"#576c89",
        textAlign:"center",
        font:{fontSize:12},
        shadowColor:"#999",
        shadowOffset:{x:0,y:1}
    });
 
    var actInd = Titanium.UI.createActivityIndicator({
        left:20,
        bottom:13,
        width:30,
        height:30
    });
 
    tableHeader.add(arrow);
    tableHeader.add(statusLabel);
    tableHeader.add(lastUpdatedLabel);
    tableHeader.add(actInd);
 
    tableView.headerPullView = tableHeader;
 
 
    var pulling = false;
    var reloading = false;
 
    function beginReloading()
    {
        // just mock out the reload
        setTimeout(endReloading,2000);
    }
 
    function endReloading()
    {
        // simulate loading
        for (var c=lastRow;c<lastRow+10;c++)
        {
            tableView.appendRow({title:"Row "+c});
        }
        lastRow += 10;
 
        // when you're done, just reset
        tableView.setContentInsets({top:0},{animated:true});
        reloading = false;
        lastUpdatedLabel.text = "Last Updated: "+formatDate();
        statusLabel.text = "Pull down to refresh...";
        actInd.hide();
        arrow.show();
    }
 
    tableView.addEventListener('scroll',function(e)
    {
        var offset = e.contentOffset.y;
        if (offset <= -65.0 && !pulling)
        {
            var t = Ti.UI.create2DMatrix();
            t = t.rotate(-180);
            pulling = true;
            arrow.animate({transform:t,duration:180});
            statusLabel.text = "Release to refresh...";
        }
        else if (pulling && offset > -65.0 && offset < 0)
        {
            pulling = false;
            var t = Ti.UI.create2DMatrix();
            arrow.animate({transform:t,duration:180});
            statusLabel.text = "Pull down to refresh...";
        }
    });
 
    tableView.addEventListener('scrollEnd',function(e)
    {
        if (pulling && !reloading)
        {
            reloading = true;
            pulling = false;
            arrow.hide();
            actInd.show();
            statusLabel.text = "Reloading...";
            tableView.setContentInsets({top:60},{animated:true});
            arrow.transform=Ti.UI.create2DMatrix();
            beginReloading();
        }
    });
    return win;
};
 
module.exports = tv_pull;

— asked 9 months ago by kent hao
0 Comments

2 Answers

Your Answer

Think you can help? Login to answer this question!