J'ai créé un UITableView
dans Interface Builder avec storyboards
. La UITableView
est configurée avec static cells
et un certain nombre de sections différentes.
Le problème que je rencontre est que j'essaie de configurer mon application dans plusieurs langues. Pour ce faire, je dois pouvoir modifier les titres de la section UITableView
.
S'il vous plaît, quelqu'un peut-il m'aider? Dans l’idéal, j’aimerais aborder le problème en utilisant IBOutlets
mais je pense que cela n’est même pas possible dans ce cas. Tous les conseils et suggestions seraient vraiment appréciés.
Merci d'avance.
Une fois que vous avez connecté votre UITableView delegate
et datasource
à votre contrôleur, vous pouvez procéder comme suit:
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
NSString *sectionName;
switch (section) {
case 0:
sectionName = NSLocalizedString(@"mySectionName", @"mySectionName");
break;
case 1:
sectionName = NSLocalizedString(@"myOtherSectionName", @"myOtherSectionName");
break;
// ...
default:
sectionName = @"";
break;
}
return sectionName;
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
let sectionName: String
switch section {
case 0:
sectionName = NSLocalizedString("mySectionName", comment: "mySectionName")
case 1:
sectionName = NSLocalizedString("myOtherSectionName", comment: "myOtherSectionName")
// ...
default:
sectionName = ""
}
return sectionName
}
Si vous écrivez du code dans Swift, cela ressemblerait à un exemple comme celui-ci
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String?
{
switch section
{
case 0:
return "Apple Devices"
case 1:
return "Samsung Devices"
default:
return "Other Devices"
}
}
Utilisez la méthode UITableViewDataSource
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
titleForHeaderInSection est une méthode de délégué de UITableView afin d'appliquer le texte d'en-tête de la section écrite comme suit,
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
return @"Hello World";
}
Notez que -(NSString *)tableView: titleForHeaderInSection:
n'est pas appelé par UITableView si - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
est implémenté dans le délégué de UITableView;
Les autres réponses n’ont rien d’erreur, mais celle-ci offre une solution non programmatique qui peut être utile dans les situations où l’on dispose d’un petit tableau statique. L'avantage est que l'on peut organiser les localisations à l'aide du storyboard. Vous pouvez continuer à exporter des localisations à partir de Xcode via des fichiers XLIFF. Xcode 9 a également plusieurs nouveaux outils pour rendre les localisations plus faciles.
(original)
J'ai eu une exigence similaire. J'ai eu une table statique avec des cellules statiques dans mon Main.storyboard (Base). Pour localiser les titres de section à l’aide de fichiers .string, par exemple Main.strings (allemand) suffit de sélectionner la section dans le storyboard et de noter l'ID d'objet
Ensuite, allez dans votre fichier de chaîne, dans mon cas Main.strings (allemand) et insérez la traduction comme suit:
"MLo-jM-tSN.headerTitle" = "Localized section title";
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 45.0f;
//set height according to row or section , whatever you want to do!
}
le texte de l'étiquette de la section est défini.
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView *sectionHeaderView;
sectionHeaderView = [[UIView alloc] initWithFrame:
CGRectMake(0, 0, tableView.frame.size.width, 120.0)];
sectionHeaderView.backgroundColor = kColor(61, 201, 247);
UILabel *headerLabel = [[UILabel alloc] initWithFrame:
CGRectMake(sectionHeaderView.frame.Origin.x,sectionHeaderView.frame.Origin.y - 44, sectionHeaderView.frame.size.width, sectionHeaderView.frame.size.height)];
headerLabel.backgroundColor = [UIColor clearColor];
[headerLabel setTextColor:kColor(255, 255, 255)];
headerLabel.textAlignment = NSTextAlignmentCenter;
[headerLabel setFont:kFont(20)];
[sectionHeaderView addSubview:headerLabel];
switch (section) {
case 0:
headerLabel.text = @"Section 1";
return sectionHeaderView;
break;
case 1:
headerLabel.text = @"Section 2";
return sectionHeaderView;
break;
case 2:
headerLabel.text = @"Section 3";
return sectionHeaderView;
break;
default:
break;
}
return sectionHeaderView;
}
Je ne connais pas les versions antérieures des protocoles UITableView
, mais à partir d'iOS 9, func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String?
fait partie du protocole UITableViewDataSource
.
class ViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
}
}
extension ViewController: UITableViewDataSource {
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return "Section name"
}
}
Vous n'avez pas besoin de déclarer la delegate
pour remplir votre tableau avec des données.