草庐IT

ios - 快速聚焦文本字段

coder 2023-07-14 原文

我在注册屏幕上有 4 个文本字段,我已将其设置为当用户在每个文本字段上按下下一步时,下一个文本字段将获得焦点。代码如下:

func textFieldShouldReturn(textField: UITextField) -> Bool {
    if (textField == self.fNameField) {
        textField.resignFirstResponder()
        self.sNameField.becomeFirstResponder()
    }
    else if (textField == self.sNameField) {
        self.emailField.becomeFirstResponder()
        
    } else if (textField == self.emailField) {
        self.passwordField.becomeFirstResponder()
    }
    else {
        var thereWereErrors = checkForErrors()
        if !thereWereErrors
        {
            //conditionally segue to next screen
        }
    }
    
    return true
}

在返回最终文本字段时,我将调用错误检查函数(如下)。其中,如果任何字段有问题,我想关注该文本字段,以便用户可以轻松更正它。发生的事情是有错误的文本字段聚焦(如 checkForErrors 函数指示的那样)一秒钟,但随后焦点切换回密码文本字段。我还尝试将 self.passwordField.resignFirstResponder() 添加到上述函数的最后一个 else 中,这使得密码字段失去焦点,但是遇到问题的文本字段根本没有获得焦点(一秒钟都没有)我该如何解决这个问题?

func checkForErrors() -> Bool
{
    var errors = false
    let title = "Error"
    var message = ""
    if fNameField.text.isEmpty {
        errors = true
        message += "First name empty"
        alertWithTitle(title, message: message, ViewController: self)
        self.fNameField.becomeFirstResponder()
    }
    else if sNameField.text.isEmpty
    {
        errors = true
        message += "Surname empty"
        alertWithTitle(title, message: message, ViewController: self)
        self.sNameField.becomeFirstResponder()
    }
    else if emailField.text.isEmpty
    {
        errors = true
        message += "Email empty"
        alertWithTitle(title, message: message, ViewController: self)
        self.emailField.becomeFirstResponder()
    }
    else if !isValidEmail(emailField.text)
    {
        errors = true
        message += "Invalid Email Address"
        alertWithTitle(title, message: message, ViewController: self)
        self.emailField.becomeFirstResponder()
    }
    else if passwordField.text.isEmpty
    {
        errors = true
        message += "Password empty"
        alertWithTitle(title, message: message, ViewController: self)
        self.passwordField.becomeFirstResponder()
    }
    else if count(passwordField.text.utf16)<8
    {
        errors = true
        message += "Password must be at least 8 characters"
        alertWithTitle(title, message: message, ViewController: self)
        self.passwordField.becomeFirstResponder()
    }
    
    return errors
}

请注意,我已经包含了 textField 委托(delegate)。

根据要求使用 title 函数提醒:

func alertWithTitle(title: String!, #message: String, #ViewController: UIViewController) {
    let alert = UIAlertController(title: title, message: message, preferredStyle: .Alert)
    let action = UIAlertAction(title: "OK", style: .Cancel, handler: nil)
    alert.addAction(action)
    ViewController.presentViewController(alert, animated: true, completion: nil)
}

最佳答案

theTextFieldYouWant.becomeFirstResponder()

关于ios - 快速聚焦文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30913917/

有关ios - 快速聚焦文本字段的更多相关文章

  1. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  2. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  3. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  4. ruby-on-rails - 在 Rails 和 ActiveRecord 中查询时忽略某些字段 - 2

    我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr

  5. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  6. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  7. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  8. ruby-on-rails - Sphinx - 何时对字段使用 'has' 和 'indexes' - 2

    我几天前在我的ruby​​onrails2.3.2上安装了Sphinx和Thinking-Sphinx,基本搜索效果很好。这意味着,没有任何条件。现在,我想用一些条件过滤搜索。我有公告模型,索引如下所示:define_indexdoindexestitle,:as=>:title,:sortable=>trueindexesdescription,:as=>:description,:sortable=>trueend也许我错了,但我注意到只有当我将:sortable=>true语法添加到这些属性时,我才能将它们用作搜索条件。否则它找不到任何东西。现在,我还在使用acts_as_tag

  9. Ruby - 如何处理子类意外覆盖父类(super class)私有(private)字段的问题? - 2

    假设您编写了一个类Sup,我决定将其扩展为SubSup。我不仅需要了解你发布的接口(interface),还需要了解你的私有(private)字段。见证这次失败:classSupdefinitialize@privateField="fromsup"enddefgetXreturn@privateFieldendendclassSub问题是,解决这个问题的正确方法是什么?看起来子类应该能够使用它想要的任何字段而不会弄乱父类(superclass)。编辑:equivalentexampleinJava返回"fromSup",这也是它应该产生的答案。 最佳答案

  10. ruby-on-rails - 如何为空白字段编写 rspec? [Rails3.1] - 2

    我使用rails3.1+rspec和factorygirl。我对必填字段(validates_presence_of)的验证工作正常。我如何让测试将该事实用作“成功”而不是“失败”规范是:describe"Addanindustrywithnoname"docontext"Unabletocreatearecordwhenthenameisblank"dosubjectdoind=Factory.create(:industry_name_blank)endit{shouldbe_invalid}endend但是我失败了:Failures:1)Addanindustrywithnona

随机推荐