web-dev-qa-db-fra.com

Le clavier personnalisé InputAccessoryView n'est pas visible dans iOS 11

J'ai implémenté la vue d'accessoire d'entrée personnalisée qui fonctionnait correctement jusqu'à iOS 10.3.1. Mais ce n'est pas visible dans iOS 11 beta.

Quelqu'un at-il rencontré ce problème?

13
Ruchi

La question que vous posez n'a pas beaucoup de détails. Mais j'ai eu le même problème lors de l'utilisation d'un inputAccessoryView et d'un inputView personnalisé pour le champ de texte. 

Et résolu ce problème sur iOS11 en définissant le masque autoresizingMask de inputView personnalisé sur .flexibleHeight.

yourCustomInputView.autoresizingMask = .flexibleHeight

J'espère que cela résoudra le problème. Si non, peut-être fournir des informations supplémentaires?

Voici comment j'ajoute l'accessoire d'entrée, au cas où cela serait plus utile (en tant qu'extension de textfield):

public extension UITextField {

public func addToolbarInputAccessoryView(barButtonItems: [UIBarButtonItem],
                                         textColour: UIColor,
                                         toolbarHeight: CGFloat = 44,
                                         backgroundColour: UIColor = .white) {

    let toolbar = UIToolbar()

    toolbar.frame = CGRect(x: 0, y: 0, width: bounds.width, height: toolbarHeight)
    toolbar.items = barButtonItems
    toolbar.isTranslucent = false
    toolbar.barTintColor = backgroundColour
    toolbar.tintColor = textColour

    inputAccessoryView = toolbar
}

}

Ensuite, sur inputView (pas le inputAccessoryView ), j’utilisais un sélecteur de date par exemple - assurez-vous simplement que le masque de redimensionnement automatique du sélecteur de date est défini sur une hauteur flexible.

12
Jess

PSA: Si vous utilisez une barre UIToolbar en tant que vue personnalisée, elle est actuellement interrompue dans iOS 11 GM . Au lieu de perdre vos cheveux sur la façon de la réparer, il suffit de la changer en UIView . perdre l’effet de flou mais cela fonctionnera.

8
ahbou

La bêta 3 vient de sortir et certaines personnes ont dit qu'elle résolvait le problème, mais pour moi ça ne l'a pas été.

Cependant, j'ai essayé de régler la vue des accessoires sur quelque chose de stupide (100 pixels de haut) et j'ai remarqué que la barre d'annulation/restauration/collage sur les iPad était mal installée au-dessus de ma barre d'accessoires. de pommes (il était de toute façon inutile pour mon cueilleur personnalisé) et le problème a disparu

J'espère que ça aide quelqu'un

- (void)textFieldDidBeginEditing:(UITextField*)textField  
{  
    UITextInputAssistantItem* item = [textField inputAssistantItem];  
    item.leadingBarButtonGroups = @[];  
    item.trailingBarButtonGroups = @[];  
}  
5
user2843570

Pour éviter le problème inputAccessoryView dans iOS 11 pour UITextField et UITextView, utilisez simplement le code suivant:

UIView *inputView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 150)];

self.monthPickerView = [[UIPickerView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 150)];

    self.monthPickerView.backgroundColor = [UIColor whiteColor];

    self.monthPickerView.delegate = self;

    self.monthPickerView.dataSource = self;
[inputView addSubview:self.monthPickerView];

    cell.monthTextField.inputView = inputView ;

self.monthTextField.inputAccessoryView = [self doneButtonAccessoryView];


// doneButtonAccessoryView Method


-(UIToolbar*)doneButtonAccessoryView
{

    UIToolbar *kbToolbar = [[UIToolbar alloc] init];
    [kbToolbar sizeToFit];
    [kbToolbar setBarTintColor:[UIColor whiteColor]];
    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
                                                                   style:UIBarButtonItemStyleDone target:self
                                                                  action:@selector(doneClicked)];

    UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"Cancel"
                                                                     style:UIBarButtonItemStyleDone target:self
                                                                    action:@selector(cancelClicked)];
    NSDictionary *attrDict;

    attrDict = [NSDictionary dictionaryWithObjectsAndKeys:
                [UIFont fontWithName:@"Helvetica-Bold" size:16.0], NSFontAttributeName, nil];
 [doneButton setTitleTextAttributes:attrDict forState:UIControlStateNormal];
    UIBarButtonItem *flexWidth = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
                                                                               target:self action:nil];

    [kbToolbar setItems:[NSArray arrayWithObjects:cancelButton,flexWidth, doneButton, nil]];
    return kbToolbar;
}
3
Rizwan Shaikh

J'ai le même problème et j'ai découvert que la suppression de toutes les contraintes bottom, top, leading, training, left, right pour la vue Attribuée. accessoryView l'a résolue.

0
oronbz

UIToolBar est cassé dans iOS 11. Mais vous pouvez obtenir la même chose en utilisant UIView en tant que inputAccessoryView. Exemple de code extrait ici:

CGFloat width = [[UIScreen mainScreen] bounds].size.width;
UIView* toolBar = [[UIView alloc] initWithFrame:CGRectMake(0.0f,0.0f, width, 44.0f)];
toolBar.backgroundColor = [UIColor colorWithRed:0.97f  green:0.97f blue:0.97f alpha:1.0f];

UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(20.0 , 0.0f, width, 44.0f)];
[titleLabel setFont:[UIFont fontWithName:@"Helvetica" size:13]];
[titleLabel setBackgroundColor:[UIColor clearColor]];
[titleLabel setTextColor:[UIColor redColor]];
[titleLabel setText:@"Title"];
[titleLabel setTextAlignment:NSTextAlignmentLeft];
[toolBar addSubview:titleLabel];

UIButton *doneBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[doneBtn setTitle:@"Done" forState:UIControlStateNormal];
doneBtn.tintColor = [UIColor colorWithRed:(float)179/255 green:(float)27/255 blue:(float)163/255 alpha:1];
[doneBtn.titleLabel setFont:[UIFont fontWithName:@"Helvetica" size:16]];
[doneBtn addTarget:self action:@selector(btnTxtDoneAction) forControlEvents:UIControlEventTouchUpInside];
[doneBtn setFrame:CGRectMake(width-70, 6, 50, 32)];
[toolBar addSubview:doneBtn];

[toolBar sizeToFit];

txtMessageView.inputAccessoryView = toolBar;

J'espère que cette aide .. :)

0
christijk