FormChangeable 1.0.1

FormChangeable 1.0.1

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布最后发布2016年2月
SPM支持 SPM

sgr-ksmt 维护。



  • Suguru Kishimoto

FormChangeable

能够轻松地从 UITextField/UITextView 移到下一个 UITextField/UITextView 的 Swift 代码。

描述

某些 ViewController 有四个表单(文本字段或文本视图),如 nameTextFieldemailTextFieldpasswordTextFieldprofileTextView
当他们在其中输入姓名并按下键盘上的“下一步”时,我希望这会自动移动到下一个表单。
所以,我将这样实现

class ViewController: UIViewController, UITextFieldDelegate {
    @IBOutlet private weak var nameTextField: UITextField!
    @IBOutlet private weak var mailTextField: UITextField!
    @IBOutlet private weak var passwordTextField: UITextField!
    @IBOutlet private weak var profileTextView: UITextView!

    func textFieldShouldReturn(textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        if textField == nameTextField {
            mailTextField.becomeFirstResponder()
        } else if textField == mailTextField {
            passwordTextField.becomeFirstResponder()
        } else if textField == passwordTextField {
            profileTextView.becomeFirstResponder()
        } else {
            return true
        }
        return false
    }
}

或者,

class ViewController: UIViewController, UITextFieldDelegate {
    @IBOutlet private weak var nameTextField: UITextField!
    @IBOutlet private weak var mailTextField: UITextField!
    @IBOutlet private weak var passwordTextField: UITextField!
    private var textfields = [UITextField]()

    override func viewDidLoad() {
        super.viewDidLoad()
        textfields += [nameTextField, mailTextField, passwordTextField]
    }

    func textFieldShouldReturn(textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        let tag = textField.tag
        let nextIndex = tag + 1
        if nextIndex < textfields.count {
            textfields[nextIndex].becomeFirstResponder()
            return false
        }
        return true
    }
}

……不太好。

问题
  • 需要检查表单。😞
  • 使用标签…😞

他们都很烦人!!!

解决方案

FormChangeable 可以解决这些问题。

特点

  • 无需再检查表单。
  • 无需使用标签。
  • 无复杂设置。
  • 可移动 UITextFIeldUITextView
  • 如果存在下一个/上一个表单,则移动到下一个/上一个表单。
    如果下一个/上一个表单不存在,则只关闭当前表单的键盘。

用法

  • [1] 设置下一个/上一个表单
import FormChangeable

class ViewController: UIViewController {
    @IBOutlet private weak var nameTextField: UITextField!
    @IBOutlet private weak var mailTextField: UITextField!
    @IBOutlet private weak var passwordTextField: UITextField!
    @IBOutlet private weak var profileTextView: UITextView!
    override func viewDidLoad() {
        super.viewDidLoad()
        nameTextField.nextForm = mailTextField
        mailTextField.nextForm = passwordTextField
        passwordTextField.nextForm = profileTextView
    }
}

或者,

import FormChangeable

class ViewController: UIViewController {
    @IBOutlet private weak var nameTextField: UITextField!
    @IBOutlet private weak var mailTextField: UITextField!
    @IBOutlet private weak var passwordTextField: UITextField!
    @IBOutlet private weak var profileTextView: UITextView!
    override func viewDidLoad() {
        super.viewDidLoad()
        let forms: [FormChangeable] = [nameTextField, mailTextField, passwordTextField, profileTextView]
        forms.registerNextForm()
    }
}
  • [2] 实现 UITextFieldDelegatefunc textFieldShouldReturn(textField:)
  • [3] 实现 UITextViewDelegatefunc textView(textView:, shouldChangeTextInRange:, replacementText:)
class ViewController: UIViewController, UITextFieldDelegate {
    func textFieldShouldReturn(textField: UITextField) -> Bool {
        textField.changeToNextForm()
        return false
    }

    func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
        if text == "\n" {
            textView.changeToNextForm()
            return false
        }
        return true
    }
}

要求

  • iOS 8.0+
  • Xcode 7.0+(Swift 2+)

安装

通信

  • 如果您发现一个错误,请打开一个问题。
  • 如果您有功能请求,请打开一个问题。
  • 如果您想做出贡献,请提交一个拉取请求。:muscle:

许可证

FormChangeable 在 MIT 许可证下。有关更多信息,请参阅 LICENSE 文件。