2010-01-04 15 views
8

¿Es posible configurar un UITextField con leftView de modo que si un usuario hace clic en UITextField el teclado muestra pero si hacen clic en un icono en la izquierda se llama otro método (es decir, uno que muestra un UIPickerview)?UITextField leftView

Respuesta

2

¿Ha intentado utilizar un UIButton para esta tarea? A partir de la documentación de la propiedad leftView:

Si su vista superposición no se superpone otros puntos de vista de hermanos, que recibe eventos de toque como cualquier otra vista. Si especifica un control para su vista, las pistas de control y envía las acciones como de costumbre. Si una vista de superposición se superpone a , el botón borrar, sin embargo, el botón claro siempre tiene prioridad en recibiendo eventos.

Para crear una instancia de UIButton, configure su apariencia y acciones según sea necesario, luego configúrelo como la propiedad leftView.

+0

En realidad esto no funciona. Esto es lo que tengo: \t UIButton * detailButton = [[UIButton alloc] init]; \t [detailButton setImage: [UIImage imageNamed: @ "textview-list-icon.png"] forState: UIControlStateNormal]; \t self.propertyField.leftView = detailButton; \t [release DetailButton]; El código se compila y se ejecuta sin ningún error o advertencia en la consola, pero el botón no se muestra. ¿He entendido mal esto? Gracias. –

+0

Intenta configurar el marco del botón.A menos que especifique un marco, no sabrá dónde y cómo dibujarse, por lo que no lo verá. Es por eso que generalmente desea utilizar initWithFrame en lugar de init para las subclases de UIView, por lo que no tendrá que preocuparse por configurarlo más tarde. –

20

¿Ha comprobado que el leftFieldViewMode se establece en algo que no sea nunca se

[textField setLeftViewMode:UITextFieldViewModeAlways]; 
8

instancias de un botón como se hace u normaly

UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom]; 

[btn setFrame:CGRectMake(0,0,30,30)]; 

[btn setTitle:@"title" forState:UIControlStateNormal]; 

[btn addTarget:self action:@selector(BtnClick) forControlEvents:UIControlEventTouchUpInside]; 

instancias de un campo de texto como lo hace normalmente

UITextField *txtfield1=[[UITextField alloc]initWithFrame:CGRectMake(10, 10,300,30)]; 

[txtfield1 setBackgroundColor:[UIColor grayColor]]; 

[txtfield1 setPlaceholder:@" Enter"]; 

Para establecer una vista en el lado izquierdo (también está disponible la vista derecha)

[txtfield1 setLeftView:btn]; 

si quieres la vista para mostrar siempre a continuación, por debajo de código hace que

[txtfield1 setLeftViewMode:UITextFieldViewModeAlways]; 

si quieres la vista para mostrar Nunca continuación

[txtfield1 setLeftViewMode:UITextFieldViewModeNever]; 

si quieres la vista para mostrar si el campo de texto no está editado, entonces debajo de

[txtfield1 setLeftViewMode:UITextFieldViewModeUnlessEditing]; 

si quieres la vista para mostrar si el campo de texto se edita entonces

[txtfield1 setLeftViewMode:UITextFieldViewModeWhileEditing]; 

evento de clic de botón y el pop más

-(void)BtnClick 
{ 
    //Usual pop over coding goes here 
}