在关闭视图之前从UITextField读取最新值时出现问题

时间:2011-03-20 11:26:21

标签: cocoa-touch uitableview uitextfield

我认为我正在以模态方式显示以获取用户的登录信息。我有以下设置:

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

问题

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

一些想法

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

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

其次,我也可以在调用委托之前阅读用户名或密码,但之后我必须查找文本字段。如果视图不可见,我认为假设单元确实存在是错误的。这只是一个很大的问题,但我不想做对。保留didSelectRowAtIndexPath:可以吗?但是,这样,我就无法使用一些自己提供文本字段的自定义单元格。

基本上我想要以下内容:

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

3 个答案:

答案 0 :(得分:1)

在所有技巧之后我终于想到在调用委托之前简单地辞职第一响应者修复了这个。在表视图控制器中,我只需添加一个调用:

    [[self.view findFirstResonder] resignFirstResponder];

findFirstResonder来自某个类别,可以找到here

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

我想这必须要做的伎俩