teclado solo silencio saber robado reparar pone numeros numerica los fila descompuso desbloquear como boton bloqueado arriba activar iphone uitextview uikeyboard ios4

solo - reparar boton silencio iphone 6



¿Cómo mostrar el botón ''Hecho'' en el teclado numérico en el iPhone OS 4? (7)

He creado una versión para habilitar la versión horizontal del teclado numérico ... conecte la técnica descrita en el blog de Luzian Scherrer y agregue los dos paquetes adicionales (no incluidos aquí), y el booleano "isLandscape" en el método "didRotateFromInterfaceOrientation". .

@interface AlarmController () { CGRect doneButtnRectVert; CGRect doneButtnRectHorz; CGRect doneButtnRect; UIImage* DoneUpVert; UIImage* DoneDownVert; UIImage* DoneUpHorz; UIImage* DoneDownHorz; UIImage* DoneUp; UIImage* DoneDown; UIButton *oldDoneButton; } @end //--------------------------------------------------------------------------- - (void)viewDidUnload { NSLog(@"viewDidUnload AlarmController"); [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil]; [super viewDidUnload]; } //--------------------------------------------------------------------------- - (void)addButtonToKeyboard { NSLog(@"addButtonToKeyboard AlarmController"); if (isLandscape) { doneButtnRect = doneButtnRectHorz; DoneUp = DoneUpHorz; DoneDown = DoneDownHorz; } else { doneButtnRect = doneButtnRectVert; DoneUp = DoneUpVert; DoneDown = DoneDownVert; } UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom]; doneButton.frame = doneButtnRect; doneButton.adjustsImageWhenHighlighted = NO; [doneButton setImage:DoneUp forState:UIControlStateNormal]; [doneButton setImage:DoneDown forState:UIControlStateHighlighted]; [doneButton addTarget:self action:@selector(done:) forControlEvents:UIControlEventTouchUpInside]; UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1]; UIView* keyboard; for(int i=0; i<[tempWindow.subviews count]; i++) { keyboard = [tempWindow.subviews objectAtIndex:i]; if([[keyboard description] hasPrefix:@"<UIPeripheralHost"] == YES) { if (oldDoneButton) [oldDoneButton removeFromSuperview]; [keyboard addSubview:doneButton]; } } oldDoneButton = doneButton; } //--------------------------------------------------------------------------- - (void)keyboardDidShow:(NSNotification *)note { NSLog(@"keyboardDidShow AlarmController"); [self addButtonToKeyboard]; } #pragma mark - #pragma mark meaty area... //--------------------------------------------------------------------------- - (void)textFieldDidEndEditing:(UITextField *)textField { NSLog(@"textFieldDidEndEditing AlarmController"); oldDoneButton = nil; } //--------------------------------------------------------------------------- - (void)viewDidLoad { NSLog(@"viewDidLoad AlarmController"); [super viewDidLoad]; doneButtnRectVert = CGRectMake(0, 163, 106, 53); doneButtnRectHorz = CGRectMake(0, 122, 159, 40); DoneUpVert = [UIImage imageNamed:@"DoneUp3.png"]; DoneDownVert = [UIImage imageNamed:@"DoneDown3.png"]; DoneUpHorz = [UIImage imageNamed:@"DoneUpHor.png"]; DoneDownHorz = [UIImage imageNamed:@"DoneDnHor.png"]; doneButtnRect = doneButtnRectVert; DoneUp = DoneUpVert; DoneDown = DoneDownVert; oldDoneButton = nil; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; }

Esta pregunta ya tiene una respuesta aquí:

Me gustaría agregar un botón Hecho al teclado numérico del iPhone. Incluso hay un espacio útil en la parte inferior izquierda para este botón.

Anteriormente, estaba usando un truco similar a los descritos en la Pregunta 584538 y la excelente publicación del blog de Luzian Scherrer , pero eso dejó de funcionar en iOS 4. Puedo hacerlo creando un inputView personalizado, pero prefiero extender el teclado de Apple en lugar de escribiendo mi propia

¿Hay una nueva forma de agregar una vista al teclado estándar? ¿Alguien ha publicado un inputView OSS para esto? ¿Hay otra manera?


He enviado esto a Apple como un error. Interface Builder permite al desarrollador especificar un tipo de clave de retorno para un tipo de teclado del teclado numérico. Número de error 8759674.

Apple siguió diciendo que este problema se había registrado previamente como ID de error # 5885964 y cerraron 8759674.


La técnica descrita en la publicación del blog de Luzian Scherrer funciona en iOS 4.0.

Mi código para agregar el botón al teclado estaba fallando porque se estaba llamando desde el método textFieldDidBeginEditing: delegate, al que se llama (en 4.0) antes de que se creen las subvistas de la ventana del teclado. UIKeyboardWillShowNotification el problema llamando a mi código cuando se observa UIKeyboardWillShowNotification , lo que sucede lo suficientemente tarde.


Puede usar este código de notificación de teclado para hacer el botón hecho en el teclado numérico. Solo tiene que descargar la imagen de done.png al final.

En archivo .h

{ //Keyboard Hide UIImage *numberPadDoneImageNormal; UIImage *numberPadDoneImageHighlighted; UIButton *numberPadDoneButton; } @property (nonatomic, retain) UIImage *numberPadDoneImageNormal; @property (nonatomic, retain) UIImage *numberPadDoneImageHighlighted; @property (nonatomic, retain) UIButton *numberPadDoneButton; - (IBAction)numberPadDoneButton:(id)sender;

En archivo .m

@synthesize numberPadDoneImageNormal; @synthesize numberPadDoneImageHighlighted; @synthesize numberPadDoneButton; - (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle { if ([super initWithNibName:nibName bundle:nibBundle] == nil) return nil; if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.0) { self.numberPadDoneImageNormal = [UIImage imageNamed:@"NumberDone.png"]; self.numberPadDoneImageHighlighted = [UIImage imageNamed:@"NumberDone.png"]; } else { self.numberPadDoneImageNormal = [UIImage imageNamed:@"NumberDone.png"]; self.numberPadDoneImageHighlighted = [UIImage imageNamed:@"NumberDone.png"]; } return self; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; // Add listener for keyboard display events if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.2) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; } else { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; } // Add listener for all text fields starting to be edited [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldDidBeginEditing:) name:UITextFieldTextDidBeginEditingNotification object:nil]; } - (void)viewWillDisappear:(BOOL)animated { if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.2) { [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil]; } else { [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil]; } [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidBeginEditingNotification object:nil]; [super viewWillDisappear:animated]; } - (UIView *)findFirstResponderUnder:(UIView *)root { if (root.isFirstResponder) return root; for (UIView *subView in root.subviews) { UIView *firstResponder = [self findFirstResponderUnder:subView]; if (firstResponder != nil) return firstResponder; } return nil; } - (UITextField *)findFirstResponderTextField { UIResponder *firstResponder = [self findFirstResponderUnder:[self.view window]]; if (![firstResponder isKindOfClass:[UITextField class]]) return nil; return (UITextField *)firstResponder; } - (void)updateKeyboardButtonFor:(UITextField *)textField { // Remove any previous button [self.numberPadDoneButton removeFromSuperview]; self.numberPadDoneButton = nil; // Does the text field use a number pad? if (textField.keyboardType != UIKeyboardTypeNumberPad) return; // If there''s no keyboard yet, don''t do anything if ([[[UIApplication sharedApplication] windows] count] < 2) return; UIWindow *keyboardWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1]; // Create new custom button self.numberPadDoneButton = [UIButton buttonWithType:UIButtonTypeCustom]; self.numberPadDoneButton.frame = CGRectMake(0, 163, 106, 53); self.numberPadDoneButton.adjustsImageWhenHighlighted = FALSE; [self.numberPadDoneButton setTitle:@"Return" forState:UIControlStateNormal]; [self.numberPadDoneButton setFont:[UIFont boldSystemFontOfSize:18]]; [self.numberPadDoneButton setTitleColor:[UIColor colorWithRed:77.0f/255.0f green:84.0f/255.0f blue:98.0f/255.0f alpha:1.0] forState:UIControlStateNormal]; [self.numberPadDoneButton setImage:self.numberPadDoneImageNormal forState:UIControlStateNormal]; [self.numberPadDoneButton setImage:self.numberPadDoneImageHighlighted forState:UIControlStateHighlighted]; [self.numberPadDoneButton addTarget:self action:@selector(numberPadDoneButton:) forControlEvents:UIControlEventTouchUpInside]; // Locate keyboard view and add button NSString *keyboardPrefix = [[[UIDevice currentDevice] systemVersion] floatValue] >= 3.2 ? @"<UIPeripheralHost" : @"<UIKeyboard"; for (UIView *subView in keyboardWindow.subviews) { if ([[subView description] hasPrefix:keyboardPrefix]) { [subView addSubview:self.numberPadDoneButton]; [self.numberPadDoneButton addTarget:self action:@selector(numberPadDoneButton:) forControlEvents:UIControlEventTouchUpInside]; break; } } } - (void)textFieldDidBeginEditing:(NSNotification *)note { [self updateKeyboardButtonFor:[note object]]; } - (void)keyboardWillShow:(NSNotification *)note { [self updateKeyboardButtonFor:[self findFirstResponderTextField]]; } - (void)keyboardDidShow:(NSNotification *)note { [self updateKeyboardButtonFor:[self findFirstResponderTextField]]; } - (IBAction)numberPadDoneButton:(id)sender { UITextField *textField = [self findFirstResponderTextField]; [textField resignFirstResponder]; } - (void)dealloc { [numberPadDoneImageNormal release]; [numberPadDoneImageHighlighted release]; [numberPadDoneButton release]; [super dealloc]; }



Tengo este trabajo Vea el código aquí: http://gist.github.com/454844

Hubo dos cuestiones:

  1. UIKeyboardWillShowNotification se envía antes de que exista la vista del teclado, pero si programa su código para que se ejecute en la siguiente pasada del bucle de ejecución, existen. De modo que no tiene que molestarse con DidShow que es menos agradable visualmente.

  2. En iOS 4, la vista UIKeyboard estaba en otra parte de la jerarquía de vistas.


Puede agregar inputAccessoryView con los inputAccessoryView ''Aplicar'' y ''Cancelar'', y descartar el teclado numérico con entonces.

- (void)viewDidLoad { [super viewDidLoad]; UIToolbar* numberToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)]; numberToolbar.items = [NSArray arrayWithObjects: [[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancelNumberPad)], [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], [[UIBarButtonItem alloc]initWithTitle:@"Apply" style:UIBarButtonItemStyleDone target:self action:@selector(doneWithNumberPad)], nil]; numberTextField.inputAccessoryView = numberToolbar; } -(void)cancelNumberPad{ [numberTextField resignFirstResponder]; numberTextField.text = @""; } -(void)doneWithNumberPad{ NSString *numberFromTheKeyboard = numberTextField.text; [numberTextField resignFirstResponder]; }