2009-02-27 5 views
0

Je charge un UITableViewCell contenant deux étiquettes étiquetées. L'utilisateur quittera la vue actuelle contenant le code suivant et passera à une autre vue. Une valeur de nom y est définie et l'utilisateur revient à cette vue (code ci-dessous). J'attribue le nom qu'ils ont défini dans l'autre vue à l'étiquette de nom. Cela fonctionne mais j'ai une nouvelle étiquette mal alignée sur mes autres étiquettes. Il semble que je garde deux versions de cette cellule. Pas tout à fait certain. Des suggestions sur ce qui pourrait causer ce genre de comportement?Chargement de cellules via nib et référencement de composants dans celles-ci

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = nil; 
if(indexPath.section == 0) 
{ 
    cell = [tableView dequeueReusableCellWithIdentifier:@"CellNameIdentifier"]; 
    if (cell == nil) { 
     [[NSBundle mainBundle] loadNibNamed:@"CellentName" owner:self options:nil]; 
     cell = cellName; 
     //self.cellName = nil; 
    } 
} 
return cell; 
} 
- (void)viewDidAppear:(BOOL)animated { 
UILabel *startdate = (UILabel *)[cellName viewWithTag:1]; 
startdate.text = aName; 
[super viewDidAppear:animated]; 
} 

Répondre

1

De l'apparence de ce code, il est moins probable que vous obtenez « une nouvelle étiquette désalignement au-dessus de mes autres labels » et plus comme le dessin ne parvient pas à repeindre sur le dessus des choses correctement. Pour que cela fonctionne, vous pouvez essayer d'appeler [tableView reloadData] ou d'utiliser un observateur, mais je pense qu'il y a un meilleur moyen.

Vous devriez pouvoir passer l'objet dans votre autre vue, modifier l'objet (au lieu de l'étiquette) et déplacer les données de cette façon. En d'autres termes, sur la vue de la table, il charge les objets, et à l'intérieur de cellForRowAtIndexPath, il charge les cellules et définit les noms des étiquettes en utilisant les données de l'objet. Poussez la deuxième vue et passez l'objet en tant que propriété. Manipulez cette propriété tout ce que vous voulez sur cet écran et lorsque vous faites apparaître la vue, il n'y a pas de logique particulière. La première vue de la table affiche de nouveau tout ce qui est enregistré dans l'objet que vous manipuliez.

+0

Je ne suis pas. aName vient de ma classe d'appdelegate. Donc, il est toujours disponible en tant qu'instance. Je ne devrais pas besoin de passer des données d'objet à la deuxième vue dans ce cas, non? Je pense qu'un changement est nécessaire dans cellForRowAtIndexPath pour, "affiche tout ce qui est enregistré dans cet objet" pour fonctionner correctement? – 4thSpace

+0

Jetez un coup d'œil au projet d'exemple Apple SQLiteBooks pour un exemple de code détaillé de passage et de manipulation d'objets en tant que propriétés. – slf

Questions connexes