我只是听不懂文档所说的如何使我的iOS自定义键盘正常工作。
这是干净的Keyboard目标,并添加了似乎是苹果文档和许多SO答案的正确答案,但它不适用于XS和6S模拟器:
//
// KeyboardViewController.m
// keyboard
//
// Created by hiwa on 02/04/2019.
// Copyright © 2019 hiwa. All rights reserved.
//
#import "KeyboardViewController.h"
@interface KeyboardViewController ()
@property (nonatomic, strong) UIButton *nextKeyboardButton;
@end
@implementation KeyboardViewController
- (void)updateViewConstraints {
[super updateViewConstraints];
// Add custom view sizing constraints here
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSLayoutConstraint *heightConstraint =
[NSLayoutConstraint constraintWithItem: self.view
attribute: NSLayoutAttributeHeight
relatedBy: NSLayoutRelationEqual
toItem: nil
attribute: NSLayoutAttributeNotAnAttribute
multiplier: 0.0
constant: 300];
[self.view addConstraint: heightConstraint];
}
- (void)viewDidLoad {
[super viewDidLoad];
// Perform custom UI setup here
self.nextKeyboardButton = [UIButton buttonWithType:UIButtonTypeSystem];
[self.nextKeyboardButton setTitle:NSLocalizedString(@"Next Keyboard", @"Title for 'Next Keyboard' button") forState:UIControlStateNormal];
[self.nextKeyboardButton sizeToFit];
[self.nextKeyboardButton addTarget:self action:@selector(handleInputModeListFromView:withEvent:) forControlEvents:UIControlEventAllTouchEvents];
[self.view addSubview:self.nextKeyboardButton];
}
- (void)textWillChange:(id<UITextInput>)textInput {
// The app is about to change the document's contents. Perform any preparation here.
}
- (void)textDidChange:(id<UITextInput>)textInput {
// The app has just changed the document's contents, the document context has been updated.
UIColor *textColor = nil;
if (self.textDocumentProxy.keyboardAppearance == UIKeyboardAppearanceDark) {
textColor = [UIColor whiteColor];
} else {
textColor = [UIColor blackColor];
}
[self.nextKeyboardButton setTitleColor:textColor forState:UIControlStateNormal];
}
@end
感谢这里的任何提示。
最佳答案
基于开发人员代码级别票证:
将按钮添加到UIView(例如keysView
)
将keysView
添加到UIInputViewController的视图中。
按照问题添加约束
使keysView.frame
与self.view
相同
将至少一个常数添加到keysView
的按钮之一
现在,您应该有一个扩展的keysView
,它与self.view
一样高。
完整代码:
#import "KeyboardViewController.h"
@interface KeyboardViewController ()
@property (nonatomic, strong) UIButton *nextKeyboardButton;
@end
@implementation KeyboardViewController
- (void)viewDidLoad {
[super viewDidLoad];
// (1)
UIView *keysView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
// (3)
NSLayoutConstraint *keyboardHeightConstraint = [NSLayoutConstraint
constraintWithItem:self.view
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:0.0
constant:310];
[keyboardHeightConstraint setPriority:UILayoutPriorityDefaultHigh];
[self.view addConstraints:@[keyboardHeightConstraint]];
self.nextKeyboardButton = [UIButton buttonWithType:UIButtonTypeSystem];
[self.nextKeyboardButton setTitle:NSLocalizedString(@"Next Keyboard", @"Title for 'Next Keyboard' button") forState:UIControlStateNormal];
[self.nextKeyboardButton sizeToFit];
self.nextKeyboardButton.translatesAutoresizingMaskIntoConstraints = NO;
[self.nextKeyboardButton addTarget:self action:@selector(advanceToNextInputMode) forControlEvents:UIControlEventTouchUpInside];
[keysView addSubview:self.nextKeyboardButton];
// (5)
NSLayoutConstraint *nextKeyboardButtonLeftSideConstraint = [NSLayoutConstraint constraintWithItem:self.nextKeyboardButton attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:keysView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0];
NSLayoutConstraint *nextKeyboardButtonBottomConstraint = [NSLayoutConstraint constraintWithItem:self.nextKeyboardButton attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:keysView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0.0];
[keysView addConstraints:@[nextKeyboardButtonLeftSideConstraint, nextKeyboardButtonBottomConstraint]];
// (4)
keysView.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height);
// (2)
[self.view addSubview:keysView];
}
- (void)dealloc {
self.nextKeyboardButton = nil;
}
@end