问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何在iOS8下使用Swift设计一个自定义的输入法

发布网友 发布时间:2024-09-06 18:19

我来回答

1个回答

热心网友 时间:2024-10-13 23:42

我们会设计实现一个简单的输入法,可以输入点划,改变了键盘结构,删除字符然后隐藏自己。这个范例通过代码来生成的用户界面。当然,我们同样也可以使用Nib文件来生成界面—这个会在教程的末尾涉及。加载Nib文件会对性能有负面影响。
创建一个工程
打开Xcode6,创建一个“Single Page Application”,然后选择Swift为编程语言。
添加一个文本区域
打开Main.storyboard然后拖拽一个文本区域从组件库里。我们会使用这个来测试我们设计的键盘。
将这个文本区域居中,然后添加必要的constraints。
Hint: 如果你调用textField.becomeFirstResponder()在viewDidLoad,这个键盘会自动在应用打开时弹出。
添加这个键盘扩展
从导航器中选择这个项目文件,然后通过按+按钮添加一个新的target。
选择Application Extension然后使用Custom Keyboard模板,命名它为MorseCodeKeyboard。
这会创建一个名为MorseCodeKeyboard新文件夹,包括2个文件KeyboardViewController.swift和Info.Plist。
接下来
打开KeyboardViewController.swift,为了在不同的键盘之间进行切换,这个键盘模板文件会有一个按钮。在viewDidLoad方法中放入一个新的方法,命名为addNextKeyboardButton。
func addNextKeyboardButton() {
self.nextKeyboardButton = UIButton.buttonWithType(.System) as UIButton
...
var nextKeyboardButtonBottomConstraint = NSLayoutConstraint(item: self.nextKeyboardButton, attribute: .Bottom, relatedBy: .Equal, toItem: self.view, attribute: .Bottom, multiplier: 1.0, constant: -10.0)
self.view.addConstraints([nextKeyboardButtonLeftSideConstraint, nextKeyboardButtonBottomConstraint])
}
为了更好的梳理代码的结构,创建一个新的方法名为addKeyboardButtons,然后在viewDidLoad中调用它。虽然这里只有几个按钮,但是在真实项目中,将会有更多的按钮。在addKeyboardButtons中调用addNextKeyboardButton。
class KeyboardViewController: UIInputViewController {
...
override func viewDidLoad() {
super.viewDidLoad()
addKeyboardButtons()
}
func addKeyboardButtons() {
addNextKeyboardButton()
}
...
}

现在我们来添加点按钮,创建一个UIButton!类型的dotButton属性。
class KeyboardViewController: UIInputViewController {
var nextKeyboardButton: UIButton!
var dotButton: UIButton!
...
}
增加一个名为addDot的方法。使用系统按钮来初始化名为dotButton的属性。增加一个TouchUpInside事件回调函数。设置一个大字体然后增加圆角,同时增加约束来*它距离水平中心50个points,垂直居中。这个代码应该和下面nextKeyboardButton部分类似。
func addDot() {
// initialize the button
dotButton = UIButton.buttonWithType(.System) as UIButton
dotButton.setTitle(".", forState: .Normal)
dotButton.sizeToFit()
dotButton.setTranslatesAutoresizingMaskIntoConstraints(false)
// adding a callback
dotButton.addTarget(self, action: "didTapDot", forControlEvents: .TouchUpInside)
// make the font bigger
dotButton.titleLabel.font = UIFont.systemFontOfSize(32)
// add rounded corners
dotButton.backgroundColor = UIColor(white: 0.9, alpha: 1)
dotButton.layer.cornerRadius = 5
view.addSubview(dotButton)
// makes the vertical centers equa;
var dotCenterYConstraint = NSLayoutConstraint(item: dotButton, attribute: .CenterY, relatedBy: .Equal, toItem: view, attribute: .CenterY, multiplier: 1.0, constant: 0)
// set the button 50 points to the left (-) of the horizontal center
var dotCenterXConstraint = NSLayoutConstraint(item: dotButton, attribute: .CenterX, relatedBy: .Equal, toItem: view, attribute: .CenterX, multiplier: 1.0, constant: -50)
view.addConstraints([dotCenterXConstraint, dotCenterYConstraint])
}
接下来对于dash,delete和hideKeyboard,这个过程都比较类似。这个deleteButton会从proxy使用deleteBackward方法,然后hideKeyboardButton会通过KeyboardViewController使用dismissKeyboard方法。

与dash相关的代码几乎和dotButton代码一致。为了将dashButton按钮在水平方向与点按钮对称,只要将水平约束中的常量改变一下符号即可。
func addDash() {
...
// set the button 50 points to the left (-) of the horizontal center
var dotCenterXConstraint = NSLayoutConstraint(item: dotButton, attribute: .CenterX, relatedBy: .Equal, toItem: view, attribute: .CenterX, multiplier: 1.0, constant: -50)
view.addConstraints([dashCenterXConstraint, dashCenterYConstraint])
}
回删
当被按下时,这个删除按钮会通过textDocumentProxy,使用deleteBackword删除字符。这个布局约束会和nextKeyboardButton对称(.Left -> .Right, .Bottom->.Top)。
func addDelete() {
deleteButton = UIButton.buttonWithType(.System) as UIButton
deleteButton.setTitle(" Delete ", forState: .Normal)
deleteButton.sizeToFit()
deleteButton.setTranslatesAutoresizingMaskIntoConstraints(false)
deleteButton.addTarget(self, action: "didTapDelete", forControlEvents: .TouchUpInside)
deleteButton.backgroundColor = UIColor(white: 0.9, alpha: 1)
deleteButton.layer.cornerRadius = 5
view.addSubview(deleteButton)
var rightSideConstraint = NSLayoutConstraint(item: deleteButton, attribute: .Right, relatedBy: .Equal, toItem: view, attribute: .Right, multiplier: 1.0, constant: -10.0)
var topConstraint = NSLayoutConstraint(item: deleteButton, attribute: .Top, relatedBy: .Equal, toItem: view, attribute: .Top, multiplier: 1.0, constant: +10.0)
view.addConstraints([rightSideConstraint, topConstraint])
}
隐藏键盘
当被按下时,这个hideKeyboardButton会在KeyboardViewController上调用dismissKeyboard。
func addHideKeyboardButton() {
hideKeyboardButton = UIButton.buttonWithType(.System) as UIButton
hideKeyboardButton.setTitle("Hide Keyboard", forState: .Normal)
hideKeyboardButton.sizeToFit()
hideKeyboardButton.setTranslatesAutoresizingMaskIntoConstraints(false)
hideKeyboardButton.addTarget(self, action: "dismissKeyboard", forControlEvents: .TouchUpInside)
view.addSubview(hideKeyboardButton)
var rightSideConstraint = NSLayoutConstraint(item: hideKeyboardButton, attribute: .Right, relatedBy: .Equal, toItem: view, attribute: .Right, multiplier: 1.0, constant: -10.0)
var bottomConstraint = NSLayoutConstraint(item: hideKeyboardButton, attribute: .Bottom, relatedBy: .Equal, toItem: view, attribute: .Bottom, multiplier: 1.0, constant: -10.0)
view.addConstraints([rightSideConstraint, bottomConstraint])
}
使用Nib文件
如果写约束并非你擅长的方式,你可以创建一个界面文件,然后将它添加到你的inputView。
创建一个界面文件
右击MorseCodeKeyboard文件组,然后选择创建新文件。
选择User Interface,然后View Template,命名为CustomKeyboardInterface。
如何在iOS8下使用Swift设计一个自定义的输入法

我们会设计实现一个简单的输入法,可以输入点划,改变了键盘结构,删除字符然后隐藏自己。这个范例通过代码来生成的用户界面。当然,我们同样也可以使用Nib文件来生成界面—这个会在教程的末尾涉及。加载Nib文件会对性能有负面影响。创建一个工程 打开Xcode6,创建一个“Single Page Application”,然后选择Swif...

ios8.3以下怎么添加watchkit

在 WatchKit App 文件夹中,选中Interface.storyboard.我们将在这里设计我们的app.当前我们只有一个View,作为主屏幕或者app的启动画面。默认情况下,它是空的。我们下面要做的工作就是在这块屏幕上显示一个国家列表,首先添加一个table。从Object Library 中拖拽一个Table object到界面上。完成之后,我们就...

如何使用iOS 8的虚化效果

1、打开StoryViewController.swift文件在属性定义的那堆代码的开始加入下面这行:var blurView = UIImageView()这里可以为每个StoryViewController实例初始化一个UIImageView。2、找到viewDidLoad方法并在这个它的最后加上这样一段:optionsContainerView.subviews[0].insertSubview(blurView, atIndex:0)在Gr...

斯坦福iOS8开发计算器的一个代码问题

1. 删除继承自oc的类 2. 其中一个方法重命名 你的这种情况,显然第一种方法不合适,你的控制器还是需要继承自uiviewcontroller,那么只能用第二种方法,对这个方法进行重命名。参考:http://stackoverflow.com/questions/29457720/swift-compiler-error-which-i-dont-understand ...

Swift下UserDefaults的常见使用和注意事项

这个方法可以获得当前App存储的所有UserDefaults数据 这个通知可以在UserDefault发生改变时发出。可以考虑当这个通知发生时全局进行同步数据。 UserDefaults.didChangeNotification 在iOS7或者7以下,一般只会在app返回background的时候才会保存数据到disk,但是iOS8以及以上之后app都会在极其短的周期内去保存数据,...

如何在 Swift 中使用 Alamofire 进行网络编程

确保选择的是 single-node(免费),填上你数据库的名字。我这边取名为 alamofire-db (以 db 为后缀表示是一个数据库,这是比较普遍的命名规范)。接下来,登录你的数据库,定位好 MongoDB 数据库的 URI。马上就让你添加一个新的数据库帐号,输入用户名和密码。不要忘记密码。现在返回到你设置 URI...

如何键盘查找

SwiftKey用户现在可以通过点击输入法顶栏左侧的+按钮来调用搜索栏。在出现搜索图标之后用户可以点击,输入自己想要搜索的内容。SwiftKey是微软的智能键盘,可以学习用户的输入习惯,帮助用户更快的打字。查看电脑的所有的快捷键单击一个标题或按TAB键可以。利用键盘快捷键打开、关闭和导航“开始”菜单、桌面、...

苹果ios8.3系统怎么样?

2.下载免费应用无需输入密码 实用指数:★★★ iOS8.3对App Store要求验证的方式添加了新的设置!以后下免费APP不用密码啦~\(≧▽≦)/~啦啦啦!3.新增Emoji 表情 实用指数:★★★ iOS8.3中新增表情符号有300多个,并且为了更便于输入表情符号对键盘UI进行了微调。4.Wi-Fi问题修复 实用指数:★...

6p能干什么

与此同时,iOS8还向第三方输入法敞开了大门,用户今后不必越狱也能够使用个性化程度更高的第三方输入法了。在升级之后,SwiftKey和Flesy等Android平台上的热门输入法都将登陆iOS。4.Hand off 谷歌的云同步一直以来都能让用户跨设备来完成任务,比如在手机上开始一项活动,然后在浏览器当中继续。你可以在...

iPhone5s跟iPhone6的功能区别有哪些

与此同时,iOS8还向第三方输入法敞开了大门,用户今后不必越狱也能够使用个性化程度更高的第三方输入法了。在升级之后,SwiftKey和Flesy等Android平台上的热门输入法都将登陆iOS。 4.Hand off 谷歌的云同步一直以来都能让用户跨设备来完成任务,比如在手机上开始一项活动,然后在浏览器当中继续。你...

EXCEL里的的自定义怎么用 筛选怎么自定义自己要的选项 自定义设计 自定义页设计 自定义流程设计 自定义表单设计 自定义短袖设计 自定义表单流程数据库表设计 自定义标签怎么设置
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...同系物官能团是什么(烷烃.烯烃.炔烃.苯及其同系物的物理性质.化学性 ... 为什么我电脑上网的时候不管我上什么网站,金山毒霸都弹出个对话框告诉我... 现在贵妇人的皮草价格多少 猎豹游览器的问题,坑爹啊。 如何写电子邮箱地址 如何调动小学二年级学生课堂学习的积极性? 孩子做事磨蹭如何处理? RTK模块只能用于高精度测量,而无法提供实时 gnss常用的三种定位模式 花卉号是什么意思? iPhone手机自带的键盘输入法可以编辑颜文字吗? 苯酚,烧碱,硫氰化铵,酒精鉴别 诛仙Ⅱ电子书txt全集下载 天天象棋春秋五霸167关怎么过的? 新版天天象棋第167关怎么过图解 那个大师知道天天象棋春秋五霸167关怎么过!谢谢? 新版天天象棋167关,求解 核桃上的膜有营养,该不该保留? 进军大西北 东呈旗下城市便捷酒店西安火车站店盛大开业 怀孕可以喝奶茶么? 中信薪金煲是什么意思 中信银行薪金煲是投资什么 孕期可以喝奶茶吗?为什么? 胶原蛋白有什么功效和作用 蛋仔派对未成年充值退款流程步骤 婚庆新人改口敬茶 改口敬茶主持词 最爱那一抹中国红中茶“红印铁饼”普洱生茶 过年喝什么茶 红红火火中国节,温馨暖意过大年 房产证加名字要不要钱费用如何呢 铁盐与硫氰铵反应的原理方程式? 四川建华科技有限公司企业介绍 产妇可以吃发面红糖饼吗 许吃麦丽素么 影之刃3武林诛邪之邪在哪 刚怀孕没着床时,我吃了螃蟹和蚬子,会不会对胎 上辈子是裁缝下句怎么接 连续吃六味地黄丸对身体有副作用吗?伤身吗? 守灵期诸俗是什么 灵堂怎么布置 拜家中死去的老人 先灵都要准备哪些 忌讳什么?求帮忙 妈妈给儿子中考祝福语短发朋友圈 Fishingintheseaisa什么job 非限定性定语从句的whichis可以省略吗 mydreamjobisamusician英语作文,急急急! 如何注册一个台湾苹果id 怎么样才叫成熟什么样才叫成熟 什么叫做成熟?成熟的标志又是什么? 天盈首原开发商6号楼有房屋销售许可证吗 庭院景观设计中的微景观,精致的细节美是你值得拥有的 可否解释一下什么是双宾句、兼语句、主谓谓语句?