2012-02-01 10 views
5

Ho un UITextField (collocato all'interno di un UITableViewCell) che ha un UIButton come un costume rightView:problema Larghezza in un UITextField con rightView personalizzato

UITextField *textField = [[[UITextField alloc] initWithFrame:CGRectMake(10.0, 1.0, cell.bounds.size.width - 20.0, 31.0)] autorelease]; 
    textField.autoresizingMask = UIViewAutoresizingFlexibleWidth; 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    button.bounds = CGRectMake(0.0, 0.0, 27.0, 31.0); // Probably not needed, doesn't change anything 
    button.frame = CGRectMake(0.0, 0.0, 27.0, 31.0); 
    [button setImage:[UIImage imageNamed:@"27x31.png"] forState:UIControlStateNormal]; 
    textField.rightView = button;         
    textField.rightViewMode = UITextFieldViewModeUnlessEditing; 

Quando il campo di testo viene visualizzato, tocchi non vengono gestiti come previsto :

  • Se tocco il pulsante, viene attivato.
  • Se tocco un'area vicino al bordo sinistro del pulsante (ma al di fuori dei suoi limiti), il pulsante è ancora attivato.
  • Se voglio modificare il testo nel campo di testo anziché attivare il pulsante, devo toccare ulteriormente a sinistra.

Le cose peggiorano se si ruota il dispositivo in modalità orizzontale. In questo caso, l'area a sinistra del pulsante che attiva ancora il pulsante è più ampia, e c'è una lacuna alla sinistra di quest'area che non fa nulla: il pulsante non viene attivato e il testo non viene modificato. Devo spostare un considerevole modo a sinistra per modificare il testo in questa situazione.

Questo succede solo se il testo corrente nel campo è breve. Se il testo riempie il campo di testo, i tocchi vengono gestiti come previsto (tocca qualsiasi parte a sinistra del pulsante modifica il testo sia in verticale che in orizzontale).

Ho provato a ignorare textRectForBounds, editingRectForBounds e rightViewRectForBounds. Ho verificato che vengano chiamati e restituiscano i valori corretti, ma non cambiano nulla (purché i valori di ritorno siano corretti).

Qualche idea?

+0

Hai mai risolto questo problema? Sto avendo lo stesso problema al momento. – AnthonyM

risposta

0

Avete impostato proprietà di autoresize su TableViewCell? Prova ad aggiungere:

[cell setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight]; 

e il textField e pulsante di impostare l'opzione UIViewAutoresizingFlexibleTopMargin in questo modo:

[textField setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin]; 

[button setAutoresizingMask: UIViewAutoresizingFlexibleTopMargin]; 
+2

L'impostazione di autoResizingMask per UITableViewCell non è necessaria, eredita da UITableView (e l'ho provato, senza modifiche). UITextField ha già una maschera autoresizing (vedere il codice) e il pulsante non deve essere ridimensionato poiché si tratta di un pulsante basato su immagine. –

5

Ho avuto un problema simile con un rightView che sembrava impedire che una parte del campo di testo di accettare in ingresso. My rightView non era un pulsante, quindi ho semplicemente impostato userInteractionEnabled su NO e il campo di testo ha iniziato a ricevere di nuovo i tocchi su tutta la sua area.

Poiché si dispone di un pulsante come rightView, questo potrebbe non essere di grande aiuto. Ma un'altra somiglianza tra i nostri esempi è stata che entrambe le rightView avevano una larghezza ridotta. Forse il rightView non piace avere una larghezza < x.

+1

Bingo! Questo è stato. Ho speso per sempre cercando di capire cosa stavo facendo per bloccare l'input (stavo usando leftView e leftViewMode). L'impostazione di userInteractionEnabled sulla mia visualizzazione a padding sembra risolverlo. Grazie! – Gujamin

Problemi correlati