J'essaie d'implémenter un champ de saisie de texte pour l'iPhone/iPad. J'ai sous-classé un UITextField. Lorsqu'un utilisateur entre des critères de recherche, si la chaîne de recherche correspond à une entité de notre base de données, cette entité devient une partie des critères de recherche de l'utilisateur et je souhaite ajouter un bouton représentant cette entité à la propriété leftView du champ de texte. De cette façon, lorsque l'utilisateur entre plus de critères de recherche, les éléments sont ajoutés à la vue de gauche, de la même manière que le composeur de courrier lors de la saisie de contacts dans les champs to/cc.Ajout de sous-vues à UITextField leftView property
Mon problème est que leftView ne montre rien. Je peux augmenter la taille de leftView en définissant la propriété frame sur leftView. Mais tous les sous-affichages que j'ajoute (par exemple un UIImageView ou un UIButton), n'apparaissent PAS dans la vue de gauche du champ de texte. Le curseur du champ de texte se déplace vers la droite lorsque j'ajoute des sous-vues à la vue de gauche et que je place le cadre de la vue de gauche, mais rien n'est visible.
Je crée un nouvel UIView et place le leftView à cette vue.
Ensuite, je crée de nouveaux objets UIButton et les ajoute en tant que sous-vues à leftView.
Je définis les cadres des boutons et la vue de gauche dans layoutSubviews.
La taille de leftView augmente définitivement et le curseur de champ de texte se déplace vers la droite comme il se doit. Mais, aucun des boutons n'apparaît (les sont pas visibles)
Il doit y avoir quelque chose à propos de leftView que je ne comprends pas.
est ici extrait de code:
// add search criteria to the left view
// this will create a button on the left side of the text field
(void) addSubValue:(NSString*) value display:(NSString*)display
{
if(subValues==nil)
{
NSMutableArray * tmp=[[NSMutableArray alloc] init];
self.subValues=tmp;
[tmp release];
}
AutocompleteSubValue * subValue =[[AutocompleteSubValue alloc] init];
subValue.value=value;
subValue.display=display;
UIButton * button=[UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame=CGRectMake(0, 0, 100, 30); // this frame gets reset later in layoutSubviews...
button.titleLabel.text=display;
button.titleLabel.textColor=[UIColor whiteColor];
button.titleLabel.backgroundColor=[UIColor blueColor];
button.backgroundColor=[UIColor blueColor];
[button addTarget:self action:@selector(touchSubValue:) forControlEvents:UIControlEventTouchUpInside];
subValue.view=button;
[self.leftView addSubview:button];
[subValues addObject:subValue];
[subValue release];
[self setNeedsLayout];
}
(void) touchSubValue:(id)sender
{
UIButton * button=sender;
// find value user touched and remove from the search
AutocompleteSubValue * subValue;
for (AutocompleteSubValue * s in subValues)
{
if([s.view isEqual:button])
{
subValue=s;
break;
}
}
if(subValue)
{
[button removeFromSuperview];
[subValues removeObject:subValue];
}
}
(void)layoutSubviews
{
if(self.leftView==nil)
{
UIView * view=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 30)]; // this views frame gets reset in layoutSubviews
self.leftView = view;
self.leftViewMode = UITextFieldViewModeAlways;
[view release];
}
CGFloat left=30;
// set frames of sub values
for (AutocompleteSubValue * subValue in subValues)
{
CGFloat display_width=100+16; // TODO: get from display text
CGFloat height=30;
CGRect frame=CGRectMake(left, 4, display_width, height);
subValue.view.frame=frame;
left+=display_width+10;
}
// set width of left view to make room for buttons, and move cursor to the right
self.leftView.frame=CGRectMake(self.leftView.frame.origin.x, self.leftView.frame.origin.y, left, self.leftView.frame.size.height);
[self.leftView layoutSubviews];
}
Quels sont les cadres de UIButton? Peut-être que vous devriez montrer du code comment avez-vous modifié le leftView. – kennytm
Ok désolé, je ne peux pas formater le code correctement. Il continue à créer des barres de défilement horizontales et à rompre le formatage ... –