[Résolu] - Image de fond pour une tableView

walslayerwalslayer Membre
octobre 2012 modifié dans Vos applications #1
Bonjour à  tous, je me permet de venir poster un message sur ce forum car je n'ai pas trouvé la solution à  mon problème ailleurs. Dans mon application j'utilise une tableView (en mode groupé) avec trois cellules. J'aimerais d'abord savoir si cela est possible de mettre une image en fond ? J'ai vu sur certains tutoriels / forums qu'ils utilisaient la ligne suivante dans la fonction viewDidLoad :


<br />
self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@&quot;Logo.png&quot;]];<br />




Le problème est que je ne peux pas utiliser cette ligne, car le compilateur me met une erreur comme quoi tableView n'a rien à  faire ici..



Je ne sais donc pas comment résoudre mon problème. Merci de votre attention image/smile.png' class='bbc_emoticon' alt=':)' />

Réponses

  • CéroceCéroce Membre, Modérateur
    Il faut que l'objet qui correspond à  self possède une propriété tableView.

    Ce qui est le cas s'il s'agit d'une sous-classe de UITableViewController.
  • D'accord, donc dans mon cas, je doit utiliser la vue parent ? Je vous met le code que j'ai actuellement, mais je n'arrive pas à  mettre mon image en fond.



    viewController.h
    <br />
    #import &lt;UIKit/UIKit.h&gt;<br />
    @interface ViewController : UIViewController &lt;UITableViewDataSource, UITableViewDelegate&gt;<br />
    {<br />
    	NSArray *tableauDonnee;<br />
    }<br />
    @property (nonatomic, retain) NSArray *tableauDonnee;<br />
    @end<br />
    






    viewController.m
    <br />
    #import &quot;ViewController.h&quot;<br />
    @interface ViewController ()<br />
    @end<br />
    @implementation ViewController<br />
    @synthesize tableauDonnee;<br />
    <br />
    //fonction qui permet d&#39;initialiser le tableau<br />
    - (void)viewDidLoad<br />
    {<br />
    	tableauDonnee = [[NSArray alloc] initWithObjects:@&quot;Menu du jour&quot;,@&quot;Réservation&quot;,@&quot;Contact&quot;, nil];<br />
    	self.parentViewController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@&quot;Logo.png&quot;]];<br />
    	[super viewDidLoad];<br />
    }<br />
    //fonction qui permet de donner le nombre de cellule du tableau<br />
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section<br />
    {<br />
    	return [tableauDonnee count];<br />
    }<br />
    //fonction qui génère les cellules de la tableView<br />
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath<br />
    {<br />
    	UITableViewCell *cell = nil;<br />
    	cell = [tableView dequeueReusableCellWithIdentifier:@&quot;MyCell&quot;];<br />
    	if(cell==nil)<br />
    	{<br />
    		cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@&quot;MyCell&quot;];<br />
    	}<br />
    	cell.textLabel.text = [tableauDonnee objectAtIndex:indexPath.row];<br />
      <br />
    	return cell;<br />
      <br />
    }<br />
    @end<br />
    




    Je ne sais pas suis je part dans le bon sens ou pas.
  • Tu as du récupérer cette ligne dans un code tout fait... Effectivement, comme le dit Ceroce, il faut pour que çà  fonctionne que tu aies une propriété "tableView". Perso, lorsque je déclare des propriétés, je préfère leur mettre des noms un peu plus explicite...

    Dans le code dont tu parles, il doit y avoir quelque part :



    @property(retain,nonatomic) UITableView tableView;



    et peut-être même un IBOutlet du même nom (qu'il ne faut pas oublier de relier avec IB dans ce cas, vers une Table View)...







    A l'occasion, n'oublie pas d'aller te présenter dans la section adéquate image/rolleyes.gif' class='bbc_emoticon' alt='::)' />
  • walslayerwalslayer Membre
    avril 2012 modifié #5
    Merci de ta réponse, je n'ai pas trouvé de UITableView dans mes fichiers. Je n'utilise pas non plus d'Ourlet, je sais pas si cela change quelque chose, mais je suis sous Xcode 4.3. Pour que je puisse mettre un fond sur ma tableView il faut que j'utilise une propriété tableView, mais si je la déclare dans le header, elle serait utilisable avec le self dans mon fichier .m ?
  • 'walslayer' a écrit:


    Merci de ta réponse, je n'ai pas trouvé de UITableView dans mes fichiers. Je n'utilise pas non plus d'Ourlet, je sais pas si cela change quelque chose, mais je suis sous Xcode 4.3. Pour que je puisse mettre un fond sur ma tableView il faut que j'utilise une propriété tableView, mais si je la déclare dans le leader, elle serait utilisable avec le self dans mon fichier .m ?


    Bien sûr, c'est même comme çà  que tu dois la déclarer (dans le header, attention à  la correction automatique...), et tu fais un @synthesize dans le .m



    Dans le .h
    <br />
    @interface ViewController : UIViewController &lt;UITableViewDelegate,UITableViewDataSource&gt; {<br />
        IBOutlet UITableView *myTable;<br />
    }<br />
    @property (retain, nonatomic) UITableView *myTable;<br />
    




    Dans le .m :
    <br />
    @synthesize myTable;<br />
    - (void)viewDidLoad {<br />
        [super viewDidLoad];<br />
       <br />
        self.myTable.delegate=self;<br />
        self.myTable.dataSource=self;<br />
        self.myTable.backgroundColor=[UIColor blueColor];       // ou autre...<br />
    }<br />
    




    Sans oublier de mettre une UITableView dans ton .xib et de relier l'Outlet.
  • Je vois bien ce que je doit faire, mais je n'ai pas de xbi, j'ai un storyboard. Je pense que interface builder est intégré automatiquement (ou alors c'est carrément autre chose). Du coup je met quand même la sur-définition IBOutlet ? Et pour qu'il le détecte je doit associer mon viewController à  la classe UITableView (je crois que c'est déjà  le cas).
  • Ah, malheureusement, je n'utilise pas storyboard... (ni ARC d'ailleurs...). Je ne peux pas te répondre sur ce point.
  • Ha d'accord, et bien ce n'est pas grave. Je te remercie pour ton aide et ton attention image/biggrin.png' class='bbc_emoticon' alt=':D' />
  • Oui, étant donné que tu utilise un UIViewController il faut que tu créé un outlet comme te l'as indiqué Alf.



    Là  dessus, le fait d'utiliser Stoyboard ne change rien.



    Tu peux t'éviter de le saisir à  la main en "tirant" une connexion depuis ton objet table view de ton storyboard vers ton code source. Là  XCode te demandera de fournir un nom à  ton outlet et c'est marre.



    N'oublie pas de créer les connexions datasource et delegate depuis ton storyboard vers ton controller.

    Et cela devrait fonctionner.
  • Re-Bonjour, je vous remercie de votre implication, je n'ai toujours pas réussi a faire ce que je voulais. J'ai donc décidé de changer de mode opératoire. Je vais donc utiliser une image de fond avec un imageView et utiliser des boutons par-dessus. Cela reviens à  la même présentation graphique à  peu de choses près.

    Je vous remercie quand même d'avoir essayé de m'aider image/biggrin.png' class='bbc_emoticon' alt=':D' />
  • Ben c'est dommage quand même de ne pas utiliser les fonctions faites pour.
  • Oui je sais bien, mais même en ajoutant ma variable tableView et en faisant les liens, je n'arrive pas à  mettre cette f**** image en fond.
  • à‰trange... tu es sûr que l'mage que tu utilise en pattern est bien intégré à  ton projet (et donc présent en tant que ressource) ?
  • Oui mon image est bien dans mon dossier Ressources et je la retrouve bien dans l'onglet "média" dans le Storyboard.
  • walslayerwalslayer Membre
    avril 2012 modifié #16
    Je reviens à  l'assault !! Non je déconne, je m'excuse du double poste (je ne sais pas si cela est réprimandé) mais j'ai trouvé la solution à  mon problème. J'ai donc pensé qu'il serait judicieux de vous la faire partager image/biggrin.png' class='bbc_emoticon' alt=':D' />



    Donc en faite j'utilise simplement la ligne suivante dans ma fonction viewDidLoad :
    <br />
    self.view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@&quot;background.png&quot;]];<br />
    




    Je vous remercie encore une fois pour votre aide et votre implication image/biggrin.png' class='bbc_emoticon' alt=':D' />
Connectez-vous ou Inscrivez-vous pour répondre.