iPhone – Définition de l’arrière-plan sur UITableViewController

Est-il possible de définir une vue en arrière-plan sur un UITableViewController?

J’essaie avec le code que j’utilise sur un UIViewController , mais la vue UIViewController tout le contenu de la vue de table. Si j’ajoute la vue d’arrière-plan dans la cellForRowAtIndexPath-method , elle ne s’affiche pas du tout. Quelqu’un l’a-t-il déjà fait ou a-t-il une idée de la façon dont cela peut être fait? Voici le code que j’utilise:

 UIImage *image = [UIImage imageNamed: @"background.jpg"]; UIImageView *backImage = [[UIImageView alloc] initWithImage: image]; [self.view addSubview: backImage]; [self.view sendSubviewToBack: backImage]; 

(Ceci est fondamentalement la même que la solution de Hans Espen ci-dessus, mais utilise des méthodes de commodité pour la concision)

Mettez ceci dans votre méthode – [UITableViewControllerSubclass viewDidLoad] :

 self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"BackgroundPattern.png"]]; 

Il ne sert à rien d’éviter deux autoreleases dans une méthode viewDidLoad, car elle est rarement appelée (lorsque la vue est chargée) et aura donc un impact négligeable sur les performances.

NB: Vous devez toujours utiliser des images PNG sur l’iPhone, pas JPEG ou tout autre format.

Je sais que ça fait longtemps, mais juste pour le compte rendu. Je pense avoir trouvé une meilleure solution en utilisant UITableView.backgroundView :

 UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"lisbon.png"]]; self.tableView.backgroundView = imageView; [imageView release]; 

J’ai essayé avec une taille d’image de 320×480 sur iPhone, et fonctionne parfaitement (j’ai essayé avec .jpg aussi).

En fait, je l’ai fait fonctionner! 🙂

 NSSsortingng *backgroundPath = [[NSBundle mainBundle] pathForResource:@"background" ofType:@"jpg"]; UIImage *backgroundImage = [UIImage imageWithContentsOfFile:backgroundPath]; UIColor *backgroundColor = [[UIColor alloc] initWithPatternImage:backgroundImage]; self.tableView.backgroundColor = backgroundColor; [backgroundColor release]; 

Pour Swift, utilisez ceci,

 self.tableView.backgroundView = UIImageView(image: UIImage(named: "backgroundImage.png")) 
 self.parentViewController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"yourImage.png"]]; 

En C # pour un UITableViewController statique avec des sections que vous pouvez utiliser:

 using System; using Foundation; using UIKit; using CoreGraphics; using CoreAnimation; namespace MyNamespace { public class CustomTableViewController : UITableViewController { public override void ViewDidLoad() { base.ViewDidLoad(); SetGradientBackgound(); } private void SetGradientBackgound() { CGColor[] colors = new CGColor[] { UIColor.Purple.CGColor, UIColor.Red.CGColor, }; CAGradientLayer gradientLayer = new CAGradientLayer(); gradientLayer.Frame = this.View.Bounds; gradientLayer.Colors = colors; gradientLayer.StartPoint = new CGPoint(0.0, 0.0); gradientLayer.EndPoint = new CGPoint(1.0, 1.0); UIView bgView = new UIView() { Frame = this.View.Frame }; bgView.Layer.InsertSublayer(gradientLayer, 0); UITableView view = (UITableView)this.View; view.BackgroundColor = UIColor.Clear; view.BackgroundView = bgView; } // Setting cells background transparent public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) { var cell = base.GetCell(tableView, indexPath); cell.BackgroundColor = UIColor.Clear; return cell; } // Setting sections background transparent public override void WillDisplayHeaderView(UITableView tableView, UIView headerView, nint section) { if (headerView.GetType() == typeof(UITableViewHeaderFooterView)) { UITableViewHeaderFooterView hView = (UITableViewHeaderFooterView)headerView; hView.ContentView.BackgroundColor = UIColor.Clear; hView.BackgroundView.BackgroundColor = UIColor.Clear; } } } } 

Le résultat peut être quelque chose comme ceci:

Définition de l'arrière-plan de classement TableViewController