【问题标题】:Problem reading the latest value from UITextField before closing the view在关闭视图之前从 UITextField 读取最新值的问题
【发布时间】:2011-03-21 18:35:07
【问题描述】:

我有一个视图,我正在模态显示以从用户那里获取登录信息。我有以下设置:

  • 视图控制器是UITableViewController
  • 该表包含三个单元格:用户名和密码字段(UITableViewCell 中的类型均为 UITextField)和一个简单的单元格作为登录按钮。
  • 值从UITextField 中的textFieldDidEndEditing:message 读取
  • 文本字段由不同的标记值标识。

问题

我的问题是,当焦点位于UITextField 并且用户触摸登录按钮时,相应的UITextFieldtextFieldDidEndEditing: 消息在didSelectRowAtIndexPath: 之后发送。现在这里的问题是我正在向didSelectRowAtIndexPath: 中的LoginViewControllerDelegate 发送新用户凭据的消息,当时尚未读取文本字段的值。

一些想法

我有一些如何解决这个问题的想法,但我对每个想法都有疑虑。

首先,我可以关闭登录视图并在关闭期间通知委托,但我想给委托(拥有此登录视图的人)完全控制权,我认为关闭登录应该是委托的工作查看成功登录(登录视图仅读取凭据,委托验证这些)。

其次,我还可以在调用代理之前读取用户名或密码,但随后我必须查找文本字段。如果视图不可见,我认为假设单元格确实存在是错误的。这只是一个很大的假设,但我不想让它正确。保留UITextFields 可以吗?但是,这样一来,我就不能使用一些本身会提供文本字段的自定义单元格。

基本上我想要以下内容:

  1. 检测到需要(有效)用户凭据,弹出登录视图
  2. 用户输入用户名和密码并调用完成。
  3. 委托验证这些凭据。如果它们不起作用,则会显示一条消息并再次尝试第 2 步。
  4. 凭据没问题,所以关闭登录视图并继续。

【问题讨论】:

    标签: cocoa-touch uitableview uitextfield


    【解决方案1】:

    在所有技巧之后,我终于想到,只需在调用委托之前让第一响应者辞职即可解决此问题。在表格视图控制器中,我只需添加一个调用:

        [[self.view findFirstResonder] resignFirstResponder];
    

    findFirstResonder 来自一个类别,可以在 here 中找到。

    【讨论】:

      【解决方案2】:

      试试这个,而不是使用第三个单元格作为登录按钮。在登录视图上使用一个简单的按钮。在该按钮的 IBAction 上,您可以验证用户输入。

      【讨论】:

      • 好的,我试过了。似乎按钮的目标操作仍然在我读取文本字段值的textFieldDidEndEditing: 之前执行。
      【解决方案3】:

      您可以使用具有两个文本字段和一个 UIButton 的简单视图。按下按钮后,您可以通过 [yourView removeFromSuperview] 从超级视图中删除视图。您可以从 yourTextfield.text 接收数据。

      我想这一定可以解决问题

      【讨论】:

      • 我不太明白。我特别想为此使用表格视图,并且我不希望在代表这么说之前关闭覆盖(即弹出登录对话框)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      • 2020-10-25
      • 2011-11-09
      相关资源
      最近更新 更多