【问题标题】:Using UITextViews as UITextFields使用 UITextViews 作为 UITextFields
【发布时间】:2015-04-07 08:11:34
【问题描述】:

这是我的第一个问题。

我目前正在使用 Swift 开发 iOS 应用程序。我之前使用三个 UITextField 让用户输入他们的数据(这是一个日记应用),但我没有意识到 UITextField 仅限于一行。

我一直致力于让三个 UITextView 表现得像 UITextField,除了一件事。我正在使用下面的代码来检测用户是否按下了返回键,以便他们可以开始在下一个 TextView 中输入(就像返回键在多个 TextField 中的行为方式一样)。

我的一个问题是,当光标向下移动到下一个 TextView 时,它会带来新行(“\n”)!我尝试了许多不同的方法来解决这个问题,但似乎没有任何效果。有任何想法吗?

谢谢, 马特

func textView(textView: UITextView!, shouldChangeTextInRange: NSRange, replacementText: NSString!) {
    if(replacementText == "\n") {
        if(textView == firstTextView) 
        {
            firstTextView.resignFirstResponder()
            secondTextView.becomeFirstResponder()
        }

        if(textView == secondTextView)
        {
            secondTextView.resignFirstResponder()
            thirdTextView.becomeFirstResponder()
        }

        if(textView == thirdTextView)
        {
            thirdTextView.resignFirstResponder()
        }

    }
}

【问题讨论】:

    标签: ios swift uitextfield uitextview


    【解决方案1】:

    据我所知,textView(_:shouldChangeTextInRange:replacementText:)must return Bool value

    optional func textView(_ textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool
    

    当你返回false 时,它会取消文本的更改。所以我认为你应该:

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

    【讨论】:

    • 嗯,这听起来对我来说可能是正确的,但现在我收到了这个错误:类型'()'不符合协议'BooleanLiteralConvertible'
    • 只需在函数签名中添加-> Bool返回类型。
    • 呃!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    相关资源
    最近更新 更多