如何在Titanium中向TableViewSection追加一行?

时间:2010-04-27 13:44:57

标签: javascript iphone titanium

我正在使用Titanium开发iPhone应用程序,需要在特定TableViewSection附加一行。我无法在页面加载时执行此操作,因为它是在应用程序的整个生命周期中由用户动态完成的。文档说TableViewSection有一个add方法,它接受两个参数,但我不能使它工作。这是我现有的代码:

for(var i = 0; i <= product_count; i++){
    productsTableViewSection.add(
        Ti.UI.createTableViewRow({
            title:'Testing...'
        })
     );
}

这只是传递一个参数,这导致Titanium死于未捕获的异常:

2010-04-26 16:57:18.056 MyApplication[72765:207] *** Terminating app due to uncaught 
exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in 
section 2. The number of rows contained in an existing section after the update (2) must be 
equal to the number of rows contained in that section before the update (1), plus or minus the 
number of rows inserted or deleted from that section (0 inserted, 0 deleted).'
2010-04-26 16:57:18.056 MyApplication[72765:207] Stack: (

异常看起来好像做了添加行,但由于某种原因不允许这样做。由于文档说TableViewSection接受“查看”和“行”,我尝试了以下内容:

for(var i = 0; i <= product_count; i++){
    productsTableViewSection.add(
        Ti.UI.createView({}),
        Ti.UI.createTableViewRow({
            title:'Testing...'
        })
     );
}

上面的代码不会抛出异常,但它会提供[WARN]

[WARN] Invalid type passed to function. expected: TiUIViewProxy, 
was: TiUITableViewRowProxy in  -[TiUITableViewSectionProxy add:] (TiUITableViewSectionProxy.m:62)

TableViewSections似乎不支持appendRowinsertRow等任何方法,所以我不知道还有什么方法可以解决这个问题。我查看了KitchenSink应用程序,但没有找到向TableViewSection添加行的示例。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:4)

我自己也在解决这个问题,经过大量的反复试验后,我发现在TableViewSection的封闭TableView上设置数据是必要的:

var win = Ti.UI.currentWindow;
var tableview = Ti.UI.createTableView();
var sec1 = Titanium.UI.createTableViewSection();
var sec2 = Titanium.UI.createTableViewSection();
var data = [];

for(var v=0; v<=10; v++) {
    var row = Ti.UI.createTableViewRow({
        title:'Section 1 row '+v,
        className:'sectionrow'
    });
    sec1.add(row);
}
for(var c=0; c<=10; c++) {
    var row = Ti.UI.createTableViewRow({
        title:'Section 2 row '+c,
        className:'sectionrow'
    });
    sec2.add(row);
}

data[0] = sec1;
data[1] = sec2;
tableview.data = data;

win.add(tableview);

setTimeout(function() {
    alert('Adding additional rows to section 1');
    for(var x=0; x<=5; x++) {
        var row1 = Ti.UI.createTableViewRow({
            title:'Section 1 additional row '+x,
            className:'sectionrow'
        });
        sec1.add(row1);
    }
    alert('Adding additional rows to section 2');
    for(var y=0; y<=5; y++) {
        var row2 = Ti.UI.createTableViewRow({
            title:'Section 2 additional row '+y,
            className:'sectionrow'
        });
        sec2.add(row2);
    }
    // this is the line that makes the magic happen!
    tableview.data = data;
}, 3000);
祝你好运!

答案 1 :(得分:1)

您是否尝试在for add方法之外创建视图?看起来它可能是一个构造函数问题。

尝试在for循环外创建一个通用视图,看看是否会让你超过警告消息。

答案 2 :(得分:0)

复卷机的说法效果很好。这是类似的技巧,以更简单的形式呈现。将新行添加到TableViewSection后包含以下(看似愚蠢)语句:

$.table.data = $.table.data

HTH