2013-10-06 81 views
1

我有一個tableview,而其中一行包含一個按鈕。當用戶按下按鈕時,我向包含文本區域的表格添加一行。我希望新的行位於tableview的頂部並打開鍵盤。這裏是我所嘗試的:當TextArea聚焦時,TableView ScrollToIndex

function addNewComment() { 
    var newComment = new NewComment(tableView.data[0].rows.length); 

    //I add the spacer so that if the added row is the last in the table, it can still be at the top of the view 
    var spacer = Ti.UI.createTableViewRow({ 
     height:250, 
     backgroundColor: 'white' 
    }); 

    //There are 6 rows of information in the table before the comments start 
    tableView.appendRow(spacer, {animated:false}); 
    tableView.insertRowAfter(5, newComment, {animationStyle:Titanium.UI.iPhone.RowAnimationStyle.DOWN}); 

    //The listener for this just focuses the text area 
    Ti.App.fireEvent('newCommentAddedToView'); 
    tableView.scrollToIndex(6,{animated:true,position:Ti.UI.iPhone.TableViewScrollPosition.TOP}); 
} 

當這運行時,就好像該方法的最後一行沒有被調用。新行滾動到視圖中,但不是一直到頂部。它只能滾動瀏覽到足以查看您在文本區域中輸入的內容。然後,您可以手動滾動該行,使其與頂部對齊,但我想自動執行此操作。有什麼辦法可以做到這一點?

在此先感謝。

+0

該索引是否正確? – Anand

回答

0

將焦點置於TextField或TextArea觸發器上,滾動到放置位置。在TextArea中已經設置焦點後,請嘗試調用scrollToIndex。

+0

這就是最後兩行所做的。 'newCommentAddedToView'事件只是將焦點放在文本字段上。 – eliot

+0

是的,但觸發事件是異步的,所以可能在你的情況下,在eventListener處理newCommentAddedToView之前執行tableView.scrollToIndex()。你可以放兩個不同的console.logs()來確定代碼的執行順序。 – daniula