UIViewController的InterfaceOrientation已弃用且Document建议使用[[UIApplication sharedApplication] statusBarOrientation],但iOS 8的扩展中没有sharedApplication.
正如@Retro所提到的,在大多数情况下,您可以使用self.traitCollection.verticalSizeClass或self.traitCollection.horizontalSizeClass在UIViewController中获取方向信息.
这InputMethodManager是一种应用程序可用于与系统键盘交互的服务.编辑EditText也喜欢用它来间接通知键盘变化(例如updateSelection).
我可以参考InputMethodManager这个
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
Run Code Online (Sandbox Code Playgroud)
我的问题是,这似乎只适用于系统键盘.我可以使用InputMethodManager一个自定义应用程序内的键盘?如果只是一个孤立的应用程序我不在乎,但我在一个库中包括一个将在许多应用程序中使用的自定义键盘.我需要一种标准的方式让编辑器与键盘进行通信.
我是否必须编写自己的输入法管理器,或者是否有办法在InputMethodManager我的自定义应用内键盘中使用该标准?
更新
以下是一些线索,说明如果无法使用标准输入法管理器,我将如何实现自己的自定义输入法管理器.
InputMethodManager(文件)(源代码)InputMethod 接口InputMethodSession 接口KeyboardView.OnKeyboardActionListener界面(键盘实现它)InputMethodService(键盘扩展此)(文档)(源代码)根据文档,更改自定义键盘的高度很简单.这是Apple文档中显示的swift等效版本的代码
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
let constraint = NSLayoutConstraint(item: self.view, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 0.0, constant: 400.0)
self.view.addConstraint(constraint)
}
Run Code Online (Sandbox Code Playgroud)
这确实有效,但它会将高度更改为CONSTANT值,如果更改设备的方向,则该值不可取.在纵向模式下将键盘高度设置为400.0可能没问题,但在横向模式下可能不合适.例如:iPhone 5的标准键盘视图大小为纵向320,216和横向568,162.设置恒定高度会将键盘视图大小更改为纵向的320,400和横向的568,400(实际上是整个屏幕).
我现在唯一想到的是创建一个字典,其中包含每种设备类型和每个方向的键盘视图大小,然后在每次设备更改方向时更新恒定高度约束.有没有人找到更优雅的解决方案?
在iOS 9中,如果我显示带有键盘的相机,当我关闭相机控制器并且键盘返回时,布局会被破坏,如下面的屏幕截图所示.
重现步骤:
我正在构建我的第一个自定义键盘。我正在使用 Swift 2 和 Xcode 7。我用它作为我的键盘
(我在 iPhone 上运行)当我点击外星人小脸时,我想要
带有该图像的小表情符号或
将图像(如果可能)插入到用户键入的位置。我已经尝试过这段代码
let pasteboard: UIPasteboard = UIPasteboard.generalPasteboard()
let image: UIImage = currentImage!
let newImage = scaleImage(image, toSize: CGSize(width: 40, height: 40))
let imgData: NSData = UIImagePNGRepresentation(newImage)!
pasteboard.setData(imgData, forPasteboardType: UIPasteboardTypeListImage[0] as! String)
let proxy = UITextDocumentProxy.self as! UITextDocumentProxy
let data = pasteboard.string!
print(data)
proxy.insertText(data)
Run Code Online (Sandbox Code Playgroud)但我一直没有成功。当我 时print(data),我收到nil,然后是EXC_BAD_ACCESS下一行的 。我怎样才能实现我的两个目标中的一个?感谢您的帮助。
如何在iOS 10中以编程方式打开键盘的设置屏幕?
此代码在iOS 10中不起作用
NSURL *keyboardSettingsURL = [NSURL URLWithString: @"prefs:root=General&path=Keyboard/KEYBOARDS"];
[[UIApplication sharedApplication] openURL:keyboardSettingsURL];
Run Code Online (Sandbox Code Playgroud)
并添加了URL Scheme
我正在尝试从我的键盘扩展中打开。我有自定义键盘,并且已从设置中添加该键盘。在我的自定义键盘上有一个“显示更多”按钮,我想点击这个按钮打开我的应用程序。
所以我尝试了以下代码:
let context = NSExtensionContext()
context.open(url! as URL, completionHandler: nil)
var responder = self as UIResponder?
while (responder != nil) {
if responder?.responds(to: Selector("openURL:")) == true {
responder?.perform(Selector("openURL:"), with: url)
}
responder = responder!.next
}
Run Code Online (Sandbox Code Playgroud)
它运行成功,但正如我们所知,swiftSelector("method_name:")已被弃用并#selector(classname.methodname(_:))改为使用,因此它发出警告。我想解决这个警告。所以我尝试过 Xcode 自动建议:
if responder?.responds(to: #selector(UIApplication.openURL(_:))) == true {
responder?.perform(#selector(UIApplication.openURL(_:)), with: url)
}
Run Code Online (Sandbox Code Playgroud)
也试过:
if responder?.responds(to: #selector(NSExtensionContext.open(_:))) == true {
responder?.perform(#selector(NSExtensionContext.open(_:)), with: url)
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过其他可能的方法,但没有运气。如果有人知道该怎么做,请告诉我。
我提到了这个链接,Julio Bailon 的回答:
我的应用程序中有一个自定义键盘扩展,使用swift开发.他们的键盘工作正常.我想在长按键盘按钮(如默认的iOS键盘)时添加显示带有额外字符的弹出窗口的功能.像这样的东西:
我搜索了很多,但大多数都没有回答,答案是在Obj-C.我对Obj-C了解不多,对快速编程也相当新.
任何帮助将非常感激.
keyboard ios swift custom-keyboard uilongpressgesturerecogni
我需要一个只有数字(没有十进制符号)的 numberInputKeyboard。我已经尝试过,keyboardType: TextInputType.numberWithOptions(decimal: false)但这仍然对我没有帮助
我有一个屏幕,textfields我想在其中显示“假”键盘。键盘应该能够有我喜欢的任意数量的按钮,并按照我想要的方式显示。如下图所示。
那么我的问题是你如何完成这样的事情?
是否可以以某种方式覆盖键盘接口,以便您使用输入并可以显示“假”键盘,然后在单击任何其他textfield使用普通键盘的后退按钮时删除“假”键盘?
或者我是否必须创建自定义@Composable或TextView使用自定义回调,并手动渲染文本光标?
textfield android-layout custom-keyboard android-jetpack-compose android-compose-textfield