2012-02-07 8 views
7

He añadido un UIToolBar con un UIBarButtonItem como inputAccessoryView para un UITextView. Funciona bien, pero UIBarButtonItem se puede tocar fuera de su marco, tal vez 50 píxeles afuera a la derecha. No es gran cosa, pero me molesta. Alguien sabe por qué?iOS - UIToolBar como inputAccessoryView para UITextView

Este es mi código (ARC):

UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height, 320, 44)]; 
toolBar.barStyle = UIBarStyleBlack; 
toolBar.translucent = YES; 

UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneWriting:)]; 
[toolBar setItems:[NSArray arrayWithObjects:doneButton, nil]]; 

self.messageTextView.inputAccessoryView = toolBar; 

Respuesta

2

La barra de herramientas parece ampliar el área activa de los botones más allá de sus límites si no hay otros botones cercanos en la barra de herramientas. Los ingenieros de Apple deben pensar que es mejor tratar de adivinar dónde el usuario intenta presionar en lugar de no reaccionar en absoluto.

+0

Si ese es el caso, para mí se siente más como una programación "descuidada" que hace que el botón reaccione fuera de sus límites, bueno. –

7

En iOS 6 parece que se comporta como se esperaba. buen consejo: si desea que aparezca el botón de la derecha en vez de la izquierda, utilice uno de los siguientes:

UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; 

Entonces inicializar la barra de herramientas con:

[toolBar setItems:[NSArray arrayWithObjects:flexibleSpace, doneButton, nil]]; 
2

espero que le ayuda. ..

UIToolbar* keyboardDoneButtonView = [[UIToolbar alloc] init]; 
[keyboardDoneButtonView sizeToFit]; 

UIBarButtonItem* PrevButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:105 target:nil action:nil]; //< 
UIBarButtonItem* NextButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:106 target:nil action:nil]; //> 
UIBarButtonItem* doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(doneClicked:)]; 

UIBarButtonItem* flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 
UIBarButtonItem *fake = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil] ; 

[keyboardDoneButtonView setItems:[NSArray arrayWithObjects: PrevButton,fake, NextButton,fake,flexSpace,fake,doneButton,nil] animated:YES]; 

uso falso artículo para obtener la ubicación exacta pellizco en el botón ...

+0

solución muy interesante, esta funcionó para mí, gracias. – carlos16196

Cuestiones relacionadas