2013-06-07 4 views
0

À l'origine, j'ai fait une application avec 5 tablesviewcells où chaque cellule avait sa propre image et une fois que la cellule avait un champ uitext déposé dans lequel contenait le texte de l'espace réservé. Quand cette cellule était tapée, elle appelait un uipicker et renvoyait la valeur au champ uitext. Je n'utilisais pas la méthode cellForRowAtIndexPath.Comment remplacer un UITextField du storyboard par un programme?

J'ai dû refaire les images vues de la cellule par programme parce que je devais utiliser un nouveau comportement lorsque les cellules étaient tapées. J'ai donc dû implémenter cellForRowAtIndexPath avec un commutateur pour peupler chaque cellule. J'ai fini les cellules avec les UIImageViews mais je suis tombé sur la cellule contenant l'UITextField.

Le champ uitext créé par programmation n'apparaît pas. Voici le code:

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 


    UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"MyIdentifier"] autorelease]; 

    switch (indexPath.row) { 
     case 0: 
      cell.imageView.image = [UIImage imageNamed:@"Location1.jpg"]; 
      break; 
     case 1: 

      break; 
     case 2: 
      self.myCity = [[UITextField alloc] initWithFrame:CGRectMake(200,6,100,30)]; 
      self.myCity.text = @"Pick a city..."; 
      //Call UIPicker 
      break; 
     case 3: 
      cell.imageView.image = [UIImage imageNamed:@"driveThru1.jpg"]; 
      break; 
     case 4: 
      cell.imageView.image = [UIImage imageNamed:@"24hrs1.jpg"]; 
      break; 
     case 5: 
      break; 
     default: 
      break; 
    } 


    return cell; 
} 

Voici le story-board:

enter image description here

Voici le résultat:

enter image description here

Répondre

0

Vous définissez la myCity propriété avec votre nouveau UITextField. Ce champ de texte n'est jamais ajouté en tant que sous-vue de la cellule.

Voici ce que je suggérerais. Créez une sous-classe de UITableViewCell et dans sa méthode initWithFrame, créez votre UITextField et ajoutez-le en tant que sous-vue de la cellule. Assurez-vous d'utiliser reuseIdentifers unique dans votre cellForRowAtIndexPath pour vos cellules textfield et non-textfield afin que tout soit correctement supprimé.

+0

Mais ce sont 5 cellules statiques. Je pensais que reuseIdentifiers étaient pour les cellules prototypes dynamiques? – marciokoko

+0

Les identifiants de réutilisation sont utilisés pour identifier les cellules pour le processus de suppression de file d'attente, ce qui dans votre cas, vous ne l'implémentez pas actuellement. Votre code utilise initWithStyle pour créer une nouvelle cellule sur chaque chargement. Encore une fois, la raison pour laquelle votre champ de texte n'apparaît pas est que vous ne l'ajoutez pas à la sous-vue de la cellule. Essayez [cellule addSubview: self.myCity]; – JonahGabriel

Questions connexes