2010-04-27 15 views
13

Sto sviluppando un'applicazione iPhone in Titanium e devo aggiungere una riga a un particolare TableViewSection. Non riesco a farlo a pagina, poiché viene eseguito dinamicamente dall'utente per tutto il ciclo di vita dell'applicazione. La documentazione dice che TableViewSection ha un metodo add che accetta due argomenti, ma non riesco a farlo funzionare. Ecco il mio codice esistente:Come aggiungere una riga a una TableViewSection in Titanium?

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

Questo è solo di passaggio un argomento, e che causa Titanium morire con un'eccezione non rilevata:

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

L'eccezione sembra fatto aggiungere la riga, ma non è permesso per qualche motivo. Dal momento che la documentazione dice che TableViewSection prende in "vista" e "riga", ho provato la seguente:

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

Il codice di cui sopra non generare l'eccezione, ma dà una [WARN]:

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

TableViewSections non sembrano supportare alcun metodo come appendRow o insertRow, quindi non so dove altro andare con questo. Ho esaminato l'app KitchenSink, ma non ho trovato esempi di aggiungere una riga a una TableViewSection. Qualsiasi aiuto è apprezzato.

risposta

1

hai provato a creare la vista al di fuori del metodo di aggiunta? Sembra che potrebbe essere un problema con il costruttore.

Provare a creare una vista generica all'esterno del ciclo for e vedere se questo supera il messaggio di avviso.

4

Ho combattuto con questo problema me stesso e dopo un sacco di tentativi ed errori ho scoperto che l'impostazione dei dati sulla racchiude TableView del TableViewSection è ciò che è necessario:

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

Buona fortuna!

0

Ciò che il riavvolgitore ha detto funziona bene. Ecco un trucco simile che funziona, presentato in una forma più semplice. Includere la seguente dichiarazione (apparentemente stupida) dopo aver aggiunto la nuova riga alla TableViewSection:

$.table.data = $.table.data 

HTH

Problemi correlati