2010-04-27 7 views
13

Ich entwickle eine iPhone-Anwendung in Titanium und muss eine Zeile an eine bestimmte TableViewSection anhängen. Ich kann dies beim Laden der Seite nicht tun, da dies vom Benutzer während des gesamten Lebenszyklus der Anwendung dynamisch ausgeführt wird. Die Dokumentation sagt, dass die TableViewSection eine add Methode hat, die zwei Argumente nimmt, aber ich kann es nicht arbeiten lassen. Hier ist mein vorhandener Code:Wie eine Zeile an eine TableViewSection in Titanium anhängen?

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

Das ist nur ein Argument ist vorbei in, und das verursacht Titan mit einer abgefangene Ausnahme sterben:

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: (

Die Ausnahme sieht aus wie es tat die Zeilen hinzufügen, aber aus irgendeinem Grund ist es nicht erlaubt. Da die Dokumentation sagt, dass TableViewSection in „Ansicht“ nimmt und „Zeile“, versuchte ich folgendes:

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

Der obige Code werfen nicht die Ausnahme, aber es gibt einen [WARN]:

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

TableViewSections scheinen keine Methoden wie appendRow oder insertRow zu unterstützen, daher weiß ich nicht, wohin ich sonst noch gehen soll. Ich habe die KitchenSink-App durchgesehen, aber es gibt keine Beispiele, die ich beim Hinzufügen einer Zeile zu einer TableViewSection finden könnte. Jede Hilfe wird geschätzt.

Antwort

1

Haben Sie versucht, die Ansicht außerhalb der Add-Methode zu erstellen? Es scheint, dass es ein Konstruktorproblem sein kann.

Versuchen Sie, eine generische Ansicht außerhalb der for-Schleife zu erstellen, und sehen Sie, ob Sie dadurch die Warnmeldung erhalten.

4

Ich habe mit dieser Frage mich gekämpft und nach viel Versuch und Irrtum entdeckte ich, dass auf dem umschließenden Tableview des TableViewSection die Daten Einstellung ist das, was notwendig ist:

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); 

Viel Glück!

0

Welcher Umwickler sagte, funktioniert gut. Hier ist ein ähnlicher Trick, der in einer einfacheren Form funktioniert. Fügen Sie die folgende (scheinbar dumme) Aussage, nachdem Sie die neue Zeile in die TableViewSection hinzugefügt haben:

$.table.data = $.table.data 

HTH