Je travaille sur une vue qui me permettrait d'afficher de grandes quantités de texte, et de le parcourir en affichant une page à la fois et en permettant à l'utilisateur de faire défiler la gauche.Comment naviguer dans plusieurs pages de texte en utilisant la pagination
Je pensais pouvoir le faire en plaçant UITextView dans un UIScrollView dont la propriété pagingEnabled est définie sur YES avec la définition de la largeur du contenu sur un multiple de l'écran. Tout ce que je vois est la première page, même si je peux feuilleter vers la droite et voir d'autres pages vierges. Quelqu'un peut-il donner des conseils. Voici le code ...
label = [[UITextView alloc] initWithFrame: scroller.frame];
label.editable = NO;
label.scrollEnabled = NO;
label.multipleTouchEnabled = NO;
label.userInteractionEnabled = NO;
label.font = [UIFont systemFontOfSize: 14.0];
// Get text
std::string str;
// Next line gets a single string, which is from 2000 to 8000
//characters long
str = GetStringContent();
NSString * nsStr = [NSString stringWithCString: str.c_str()];
// Measure text that will display in one page.
CGRect rect = CGRectMake(0.0, 0.0, scroller.frame.size.width, scroller.frame.size.height);
CGSize calcSize = [nsStr sizeWithFont: [UIFont systemFontOfSize: 14.0]
constrainedToSize: rect.size lineBreakMode: UILineBreakModeWordWrap];
rect.size = calcSize;
CGRect maxRect = CGRectMake(0.0, 0.0, self.view.bounds.size.width, 99999.0);
CGSize maxCalcSize = [nsStr sizeWithFont: [UIFont systemFontOfSize: 14.0]
constrainedToSize: maxRect.size lineBreakMode: UILineBreakModeWordWrap];
float pages = maxCalcSize.height/self.view.bounds.size.height;
int numberOfPages = (int)ceil(pages);
// Set text
label.text = [NSString stringWithCString: str.c_str()];
// Setup scroller
scroller.scrollEnabled = YES;
scroller.pagingEnabled = YES;
scroller.bounces = YES;
scroller.contentSize = CGSizeMake(label.frame.size.width * numberOfPages, scroller.frame.size.height);
scroller.contentOffset = CGPointMake(0, 0);
scroller.frame = rect;
scroller.clipsToBounds = YES;
[scroller addSubview: label];
[label sizeToFit];
La vue est créée dans IB, et l'UIScrollView a été ajouté en IB avec « changeurs » étant le nom de la sortie. J'ai travaillé sur cela pendant un moment, et j'ai l'impression de manquer quelque chose de fondamental sur UIScrollView, parce que je n'arrive pas à le faire fonctionner.
Paul
Merci beaucoup pour expliquer cela. J'ai fait beaucoup de recherches à ce sujet et c'est l'explication la plus claire que j'ai trouvée, et j'ai fait beaucoup de recherches sur Google. En lien avec la logique d'implémentation pour savoir ce qu'il faut afficher, existe-t-il une méthode pour NSString similaire à sizeWithFont: constraintToSize: qui indiquera également la quantité de texte qui est dessinée, dans la zone contrainte? Merci. –
Je ne suis pas sûr d'aucune main mais vous pouvez vérifier les docs. Je suppose que votre texte n'est pas formaté avec des sauts de ligne? Peut-être que l'utilisation d'une taille de police constante, d'une police à espacement fixe et d'un nombre de caractères (sans casser les mots) est la meilleure façon de le faire – coneybeare