63 Spell-checking UITextChecker

Swift3.0 // // ViewController.swift // swiftdocs // // Created by Misato Morino on 2016/08/15. // Copyright © 2016年 Misato Morino. All rights reserved. // import UIKit class ViewController: UIViewController, UITextFieldDelegate { var myTextField: UITextField! var suggestTextField : UITextView! override func viewDidLoad() { super.viewDidLoad() // Buttonを生成. let myButton = UIButton() myButton.frame = CGRect(x: 0, y: 0, width: 200, height: 40) myButton.backgroundColor = UIColor.red myButton.layer.masksToBounds = true myButton.setTitle("チェックする", for: UIControlState.normal) myButton.setTitleColor(UIColor.white, for: UIControlState.normal) myButton.setTitleColor(UIColor.black, for: UIControlState.highlighted) myButton.layer.cornerRadius = 20.0 myButton.layer.position = CGPoint(x: self.view.frame.width/2, y:200) myButton.addTarget(self, action: #selector(ViewController.onClickMyButton(sender:)), for: .touchUpInside) self.view.addSubview(myButton) // 候補用TextFieldを生成. suggestTextField = UITextView(frame: CGRect(x: 0, y: 0, width: 300, height: 250)) suggestTextField.layer.position = CGPoint(x: self.view.frame.midX, y: self.view.frame.midY + 150) suggestTextField.backgroundColor = UIColor.black suggestTextField.textColor = UIColor.white suggestTextField.textAlignment = NSTextAlignment.left suggestTextField.text = "もしかして: " suggestTextField.font = UIFont.systemFont(ofSize: CGFloat(20)) suggestTextField.isEditable = false self.view.addSubview(suggestTextField!) // スペル入力用UITextFieldを作成. myTextField = UITextField(frame: CGRect(x: 0,y: 0, width: 200, height: 30)) myTextField.borderStyle = UITextBorderStyle.roundedRect myTextField.layer.position = CGPoint(x:self.view.bounds.width/2, y:100) self.view.addSubview(myTextField) } /* Buttonが押されたときに呼ばれるメソッド. */ func onClickMyButton(sender : UIButton){ // スペルチェックを行う. suggestUpdate() } /* スペルチェックするメソッド. */ func suggestUpdate(){ // UITextCheckerの宣言. let checker : UITextChecker = UITextChecker() // textの文字数を取得. let length = myTextField.text?.characters.count // スペルチェックをする範囲(0~入力された文字数)を指定. let checkRange: NSRange = NSMakeRange(0, length!) // 範囲の中から間違ったスペルの物を探す. let misspelledRange: NSRange = checker.rangeOfMisspelledWord( // チェックする文字を指定. in: myTextField.text!, // チェックする範囲を指定. range:checkRange, // 開始位置を範囲の先頭に指定. startingAt: checkRange.location, // 指定された範囲内にミスが見つからなくてもrangeの開始位置から探し始める.(falseならミスが見つからなかった末尾の位置を保持する) wrap: true, // 言語を英語に指定. language: "en_US") // スペルミスが見つかった場合. if misspelledRange.location != NSNotFound { // 正しいスペルの候補を取得. let candidateArray: NSArray = checker.guesses( // スペルミスがある範囲. forWordRange: misspelledRange, // スペルミスを含む文字(range内). in: myTextField.text!, // 言語を指定. language: "en_US")! var str = "もしかして:\n" // 候補を配列から1つずつ取り出す. for text in candidateArray { str += text.description! str += ", " } suggestTextField?.text = str } } } Swift 2.3 // // ViewController.swift // swiftdocs // // Created by Misato Morino on 2016/08/15. // Copyright © 2016年 Misato Morino. All rights reserved. // import UIKit class ViewController: UIViewController, UITextFieldDelegate { var myTextField: UITextField! var suggestTextField : UITextView! override func viewDidLoad() { super.viewDidLoad() // Buttonを生成. let myButton = UIButton() myButton.frame = CGRectMake(0,0,200,40) myButton.backgroundColor = UIColor.redColor() myButton.layer.masksToBounds = true myButton.setTitle("チェックする", forState: UIControlState.Normal) myButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal) myButton.setTitleColor(UIColor.blackColor(), forState: UIControlState.Highlighted) myButton.layer.cornerRadius = 20.0 myButton.layer.position = CGPoint(x: self.view.frame.width/2, y:200) myButton.addTarget(self, action: #selector(ViewController.onClickMyButton(_:)), forControlEvents: .TouchUpInside) self.view.addSubview(myButton) // 候補用TextFieldを生成. suggestTextField = UITextView(frame: CGRectMake(0, 0, 300, 250)) suggestTextField.layer.position = CGPointMake(self.view.frame.midX, self.view.frame.midY + 150) suggestTextField.backgroundColor = UIColor.blackColor() suggestTextField.textColor = UIColor.whiteColor() suggestTextField.textAlignment = NSTextAlignment.Left suggestTextField.text = "もしかして: " suggestTextField.font = UIFont.systemFontOfSize(CGFloat(20)) suggestTextField.editable = false self.view.addSubview(suggestTextField!) // スペル入力用UITextFieldを作成. myTextField = UITextField(frame: CGRectMake(0,0,200,30)) myTextField.borderStyle = UITextBorderStyle.RoundedRect myTextField.layer.position = CGPoint(x:self.view.bounds.width/2,y:100) self.view.addSubview(myTextField) } /* Buttonが押されたときに呼ばれるメソッド. */ func onClickMyButton(sender : UIButton){ // スペルチェックを行う. suggestUpdate() } /* スペルチェックするメソッド. */ func suggestUpdate(){ // UITextCheckerの宣言. let checker : UITextChecker = UITextChecker() // textの文字数を取得. let length = myTextField.text?.characters.count // スペルチェックをする範囲(0~入力された文字数)を指定. let checkRange: NSRange = NSMakeRange(0, length!) // 範囲の中から間違ったスペルの物を探す. let misspelledRange: NSRange = checker.rangeOfMisspelledWordInString( // チェックする文字を指定. myTextField.text!, // チェックする範囲を指定. range:checkRange, // 開始位置を範囲の先頭に指定. startingAt: checkRange.location, // 指定された範囲内にミスが見つからなくてもrangeの開始位置から探し始める.(falseならミスが見つからなかった末尾の位置を保持する) wrap: true, // 言語を英語に指定. language: "en_US") // スペルミスが見つかった場合. if misspelledRange.location != NSNotFound { // 正しいスペルの候補を取得. let candidateArray: NSArray = checker.guessesForWordRange( // スペルミスがある範囲. misspelledRange, // スペルミスを含む文字(range内). inString: myTextField.text!, // 言語を指定. language: "en_US")! var str = "もしかして:\n" // 候補を配列から1つずつ取り出す. for text in candidateArray { str += text.description! str += ", " } suggestTextField?.text = str } } } 2.3と3.0の差分 rangeOfMisspelledWordInString から rangeOfMisspelledWord に変更 guessesForWordRange から guesses に変更

Be the first to comment

You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.