UITableViewCell
  [ Ignoră ]
Avatar
RankRankRank
Member
Din: Ploiesti
Macuser din: 06.12.11

Adaug in cell mai multe obiecte fiecare obiect reprezentind o inregistrare dintr-un NSMutableArray ( simulare de 4 coloane ).

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    
return T_Produse.count/4+1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    
  
static NSString *CellIdentifier = @"Produsele";
     
    
UITableViewCell *cell [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (
cell == nil{
        cell 
[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    

    
    int i
;

    for (
i=0;(i<=k<T_Produse.count) ; i++ )
    
{
     NSLog
(@"k = %d",k);
    
getProduse *ProdList = (getProduse *)[T_Produse objectAtIndex:k];
    
UILabel *nume [[UILabel alloc] initWithFrame:CGRectMake(5+spatiu*i16417965  )];
    
[cell.contentView addSubview:nume];
    
nume.text ProdList.denumire;
    
k=k+1;

//similar sunt adaugate UITextField , UIButton , UIImageView

}               
    [cell setSelectionStyle
:UITableViewCellSelectionStyleNone];
    
[cell setBackgroundColor:[UIColor whiteColor]];      
    return 
cell;

Dupa de fac scroll down/ up ,  obiectele din rindurile anterioare sunt acoperite de alte obiecte care nu au continutul corespunzator inregistrarilor aferente acelui cell .

Stie cineva care poate fi cauza ? voua vi s-a intimplat ?

Atasez o poza in care se poate observa ca obiectele sunt unele peste altele ( la poze ) .

 Semnătură 


MacBook Pro 15”  i7 2.2GHz/ 16GB/ 500GB SSD ,  10.11
MacBook Air 13”  i5 1.3GHz/ 4GB/ 256GB SSD ,  10.11

Profil
 
  [ Ignoră ]   [ # 1 ]
Avatar
RankRankRankRank
Moderator
Din: Cluj-Napoca
Macuser din: 26.01.06

Nu-ti merge pentru ca adaugi niste elemente si le lasi acolo, tabelul va refolosi o celula care a iesit din ecran in partea opusa, pentru eficienta, dar celula ta are deja niste elemente custom pe care nu le mai poti sterge.
Iti trebuie un CellView custom daca vrei sa adaugi elemente pe care UITableViewCell nu le contine. Mai exact, trebuie sa tii niste referinte catre acele elemente ca sa le poti updata cu noile date.

 Semnătură 

Mcintoshing…

Profil
 
  [ Ignoră ]   [ # 2 ]
Avatar
RankRankRankRank
Sr. Member
Din: Bucuresti
Macuser din: 22.09.06
NaspaNick - 04 Februarie 2012 09:30 AM

Adaug in cell mai multe obiecte fiecare obiect reprezentind o inregistrare dintr-un NSMutableArray ( simulare de 4 coloane ).

getProduse *ProdList = (getProduse *)[T_Produse objectAtIndex:k]

Nu mai folosi initiala mica la numele clasei, doar la ivar si metode smile

Daca faci aplicatia pentru iOS 5+ e foarte simplu sa lucrezi cu cell-uri custom.
Iti trebuie doar un IBOutlet catre tableView-ul tau, iar in viewDidLoad:

UINib *theCellName [UINib nibWithNibName: @"TheCellNibname" bundlenil];
    if(
theCellName)
        
[theCellName registerNibmsgCellNib forCellReuseIdentifier: @"YourCellIdentifier"]

In cellForRowAtIndexPath:

TheCellClass *cell [self.myTableView dequeueReusableCellWithIdentifier: @"YourCellIdentifier"];
// assign cell labels
return cell

Dupa ce inregistrezi nib-ul cu tableView-ul nu mai trebuie sa verifici daca cell-ul e nil, se face automat verificarea, daca cell-ul e nil se creaza unu si ti-l returneaza, daca exista in queue disponibil ti-l returneaza pe acela.

 Semnătură 

A man should look for what is, and not for what he thinks should be.—Albert Einstein

Profil
 
  [ Ignoră ]   [ # 3 ]
Avatar
RankRankRank
Member
Din: Ploiesti
Macuser din: 06.12.11

Multumesc , o sa incerc .

de ce sa nu mai folosesc litera mica ? cine ma cearta ?

 Semnătură 


MacBook Pro 15”  i7 2.2GHz/ 16GB/ 500GB SSD ,  10.11
MacBook Air 13”  i5 1.3GHz/ 4GB/ 256GB SSD ,  10.11

Profil
 
  [ Ignoră ]   [ # 4 ]
Avatar
RankRankRankRank
Sr. Member
Din: Bucuresti
Macuser din: 22.09.06
NaspaNick - 04 Februarie 2012 01:36 PM

Multumesc , o sa incerc .

de ce sa nu mai folosesc litera mica ? cine ma cearta ?


Nu te cearta nimeni,folosesti ce vrei, dar asa e recomandat, cel putin asa se asteapta alte persoane care iti vad codul smile

 Semnătură 

A man should look for what is, and not for what he thinks should be.—Albert Einstein

Profil
 
  [ Ignoră ]   [ # 5 ]
Avatar
RankRankRank
Member
Din: Ploiesti
Macuser din: 06.12.11

o sa il tin ascuns raspberry

 Semnătură 


MacBook Pro 15”  i7 2.2GHz/ 16GB/ 500GB SSD ,  10.11
MacBook Air 13”  i5 1.3GHz/ 4GB/ 256GB SSD ,  10.11

Profil
 
  [ Ignoră ]   [ # 6 ]
Avatar
RankRankRank
Member
Din: Ploiesti
Macuser din: 06.12.11

Am rezolvat dupa ce am facut urmatoarele modificari

am adaugat linia de cod de mai jos inainte de adaugarea noilor subviews ( nu am gasit o solutie sa le reutilizez ) .

[cell.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]

initializez variabila k cu indexPath.row*4+i; ( inainte o incrementam si la final ramanea cu valoarea maxima )

Acum arata asa :

static NSString *CellIdentifier = @"Prod";
    
UITableViewCell *cell [tableView dequeueReusableCellWithIdentifier:CellIdentifier] ;
    if (
cell == nil{
        cell 
[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    
}  
           
   k
=0;
    
int i;
   
[cell.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];  

    for (
i=0;(i<=k<T_Produse.count) ; i++ )
    
{
        k
=indexPath.row*4+i;
        
     
NSLog(@"k = %d",k);

    
GetProduse *ProdList = (GetProduse *)[T_Produse objectAtIndex:k];
    
UILabel *nume [[UILabel alloc] initWithFrame:CGRectMake(5+spatiu*i16417965  )];
    
[cell.contentView addSubview:nume];
    
nume.text ProdList.denumire;

// si asa mai departe 

Nu in ultimul rand , am modificat numele claselor care nu respecta “cutuma” .

Multumesc celor care au raspuns intrebarilor mele .

 Semnătură 


MacBook Pro 15”  i7 2.2GHz/ 16GB/ 500GB SSD ,  10.11
MacBook Air 13”  i5 1.3GHz/ 4GB/ 256GB SSD ,  10.11

Profil
 
  [ Ignoră ]   [ # 7 ]
Avatar
RankRankRankRank
Sr. Member
Din: Bucuresti
Macuser din: 22.09.06

Eu zic ca te complici fara rost, codul in acest fel e predispus la bug-uri.
Cel mai simplu subclasa la UITableViewCell, nib-ul creat in Interface Builder, in 5 min e gata smile

 Semnătură 

A man should look for what is, and not for what he thinks should be.—Albert Einstein

Profil
 
  [ Ignoră ]   [ # 8 ]
Avatar
RankRankRank
Member
Din: Ploiesti
Macuser din: 06.12.11

Probabil ai dreptate , dar cel mai scurt drum este cel pe care il cunosti .
La implementarea propusa de tine nu stiu cum as putea face , fara cod predispus la bug ,  ca atunci cind apas pe + sau - sa stiu ca ma refer la TextField-ul aflat intre ele ( inteleg ca tu vrei sa le desenez in IB ) .

Eu le-am construit asa

UIButton *plus [[UIButton alloc] initWithFrame:CGRectMake(92+spatiu*i2653232)]
        
[cell.contentView addSubview:plus]
        
[plus setImage:[UIImage imageNamed:@"plus.png"] forState:UIControlStateNormal];    
        
[plus addTarget:self action:@selector(Plus:) forControlEvents:(UIControlEvents)UIControlEventTouchDown];
        
[plus setTag:(k+1)+c_plus]

Mi-a fost mai usor din cod sa atribui tag fiecarui obiect astfel incit actiunea butonului sa o pot scrie asa ( este aceeasi actiune pentru toate 12 afisate simultan , vezi poza de mai sus)

- (IBAction)Plus:(id)sender {
   [
((UITextField *)[self.view viewWithTag:[sender tag]+plus_cant]setText:[NSString stringWithFormat:@"%d",
   
[((UITextField *)[self.view viewWithTag:[sender tag]+plus_cant]).text integerValue]+1]]  ;

unde plus_cant este constanta reprezentind diferenta dintre tag-urile butonului plus si TextField

const int c_plus    1000;
const 
int c_cant    100000;
const 
int plus_cant  c_cant-c_plus  

Nu am stiut cum sa fac altfel dar sunt gata sa invat .

 Semnătură 


MacBook Pro 15”  i7 2.2GHz/ 16GB/ 500GB SSD ,  10.11
MacBook Air 13”  i5 1.3GHz/ 4GB/ 256GB SSD ,  10.11

Profil
 
  [ Ignoră ]   [ # 9 ]
Avatar
RankRankRankRank
Sr. Member
Din: Bucuresti
Macuser din: 22.09.06

Pai indiferent ca ai label-uri, textfield-uri sau orice alte elemente tu daca faci subclasa la UITableViewCell in loc sa adaugi elemntele prin

cell.contentView addSubview: ... 

poti foarte simplu sa le declari ca proprietati are cell-ului iar in cellForRowAtIndexPath doar le setezi valorile corespunzatoare.
De ex cum ai 4 textfield-uri intre “+” si “-” poti sa le decrari:

@property (retainnonatomicIBOutlet UItextField *field1;
@
property (retainnonatomicIBOutlet UItextField *field2;
@
property (retainnonatomicIBOutlet UItextField *field3;
@
property (retainnonatomicIBOutlet UItextField *field4

Depinde si cum ai modelul de date salvat, din imagine banuiesc ca fiecare produs e pus pe verticala cu o imagine, un label si 2 textfield-uri, 1 pentru cod ceva si unu pentru cantitate, numele tu le stabilesti in functie de model.
Chiar nu vad de nu faci subclasa cand ai atat de multe modificari de facut pe langa un cell standard smile

 Semnătură 

A man should look for what is, and not for what he thinks should be.—Albert Einstein

Profil
 
  [ Ignoră ]   [ # 10 ]
Avatar
RankRankRank
Member
Din: Ploiesti
Macuser din: 06.12.11

hai ça o fac , de dragul tau raspberry
Mare diferenta nu este . 

( am si situatia cu 5 pe cell cind rotesti device )

 Semnătură 


MacBook Pro 15”  i7 2.2GHz/ 16GB/ 500GB SSD ,  10.11
MacBook Air 13”  i5 1.3GHz/ 4GB/ 256GB SSD ,  10.11

Profil
 
  [ Ignoră ]   [ # 11 ]
Avatar
RankRankRankRank
Sr. Member
Din: Bucuresti
Macuser din: 22.09.06

Daca nu ma insel ai inca un motiv sa faci subclasa, trebuie rescris layoutSubviews

 Semnătură 

A man should look for what is, and not for what he thinks should be.—Albert Einstein

Profil
 
  [ Ignoră ]   [ # 12 ]
Avatar
RankRankRankRank
Moderator
Din: Cluj-Napoca
Macuser din: 26.01.06

Cand o sa vezi cum iti sacadeaza tabelul o sa intelegi de ce e bine sa faci ca la carte. Elementele alea trebuie sa le creezi o singura data, fie din cod, fie ca din IB, apoi doar le updatezi.

Coding guidelines https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html

 Semnătură 

Mcintoshing…

Profil
 
  [ Ignoră ]   [ # 13 ]
Avatar
RankRankRank
Member
Din: Ploiesti
Macuser din: 06.12.11

Am facut .
Da , se face mult mai repede ( nu chiar in 5 minute )  si fara prea mult efort . Multumiri domnului Boboc pentru insistente .

Multumesc si tie .ral:cr . Am citit ce mi-ai dat .
Ma doare mina de la cat am scris la nume de proprietati , lungi si pe intelesul tuturor . Nici o abreviere .
Acum am inceput sa inteleg si eu ce scriu raspberry

Multumesc inca o data si ... stati aproape ! Cu siguranta o sa revin .

 Semnătură 


MacBook Pro 15”  i7 2.2GHz/ 16GB/ 500GB SSD ,  10.11
MacBook Air 13”  i5 1.3GHz/ 4GB/ 256GB SSD ,  10.11

Profil
 
  [ Ignoră ]   [ # 14 ]
Avatar
RankRankRankRank
Moderator
Din: Cluj-Napoca
Macuser din: 26.01.06

Xcode are autocomplete f bun, n-o sa-ti mai faci griji de denumiri lungi curand.

App de recomandari in scris codul, am dat ieri peste cea mai tampita incalcare a ei. Eu am o clasa HTTPRequest (ma rog, poate trebuia sa-i pun si un prefix), dar exista o librarie flickr care are o variabila HTTPRequest si cand era folosita credea ca apelez metode statice din clasa mea.

 Semnătură 

Mcintoshing…

Profil
 
  [ Ignoră ]   [ # 15 ]
Avatar
RankRankRank
Member
Din: Ploiesti
Macuser din: 06.12.11

Hai sa facem o lista de cuvinte rezervate smile

 Semnătură 


MacBook Pro 15”  i7 2.2GHz/ 16GB/ 500GB SSD ,  10.11
MacBook Air 13”  i5 1.3GHz/ 4GB/ 256GB SSD ,  10.11

Profil