ajouter une image de fond à UITableViewController dans une application basée sur la navigation
-
06-07-2019 - |
Question
J'ai une application de navigation dans laquelle je pousse UITableViewControllers
dans la pile. J'aimerais ajouter un UImage
en arrière-plan à tous mes UITableViewControllers
. Pas un UIColor
, mais un UImage
. Je sais comment faire cela en utilisant un fichier Nib
et en configurant le UITableView
pour qu'il utilise [UIColor ClearColor]
, mais je ne le fais pas. veux parcourir tous mes UITableViewControllers
et les changer pour utiliser des fichiers Nib
, etc.
J'ai aussi trouvé cette solution , ce qui serait formidable si j'utilisais simplement un seul contrôleur de visualisation de table dans mon application. Je pense qu'il pourrait y avoir un moyen de faire en sorte que cela fonctionne en ajoutant une sous-vue "ci-dessous". ma vue de table créée par défaut dans un UITableViewController
?
Toutes les suggestions seraient formidables.
La solution
C’est un peu différent dans une application basée sur la navigation: il suffit de changer l’arrière-plan de la vue de navigation sur lequel se trouve chaque vue de tableau. Placer le code suivant dans viewDidLoad
de chaque UITableViewController fonctionne:
self.navigationController.view.backgroundColor =
[UIColor colorWithPatternImage:[UIImage imageNamed:@"myImage.png"]];
self.tableView.backgroundColor = [UIColor clearColor];
Mais vous n’auriez peut-être besoin que de le faire une fois, au niveau supérieur du contrôleur de navigation, plutôt que dans chaque contrôleur tableview (bien que vous deviez toujours régler chaque arrière-plan pour qu’il soit effacé).
Autres conseils
Sur iOS6, utilisez ceci:
UIImageView *boxBackView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"TextureBoxboard.jpg"]];
[self.tableView setBackgroundView:boxBackView];
Si votre classe est une sous-classe UIViewController, vous pouvez le faire comme suit:
[self.view setBackgroundColor:
[UIColor colorWithPatternImage:
[UIImage imageWithContentsOfFile:
[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:
@"background.png"]]]];
UIImageView *backgroundView =
[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background.png"]];
backgroundView.frame = CGRectMake(0,
0,
self.navigationController.view.frame.size.width,
self.navigationController.view.frame.size.height);
backgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight;
[self.navigationController.view insertSubview:backgroundView atIndex:0];
[backgroundView release];
self.tableView.backgroundColor = [UIColor clearColor];
Comme l'a dit Gorm
n'a besoin que de le faire une fois, au niveau supérieur du
UINavigationController
La réponse donnée à mon Madhup est la bonne réponse. UITableViewController est une sous-classe de UIViewController, vous pouvez donc ajouter que la méthode viewDidLoad de votre UITableViewController fonctionne parfaitement.
À partir d'iOS 3.2, - [UITableView setBackgroundView:] existe, ce qui est peut-être plus simple que certaines des autres solutions proposées.