如何在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 谷歌的云同步一直以来都能让用户跨设备来完成任务,比如在手机上开始一项活动,然后在浏览器当中继续。你...