【问题标题】:textFieldShouldReturn doesn't work (using storyboard on XCode 4)textFieldShouldReturn 不起作用(在 XCode 4 上使用情节提要)
【发布时间】:2013-05-22 07:57:19
【问题描述】:

我有一个按钮和一个文本框。我只想在单击按钮时键盘消失。为什么我下面的代码不起作用。

更新:我看到了一些关于文件所有者的信息。我不明白如何在 XCode4 中执行此操作,我使用情节提要,但看不到任何文件所有者图标。

更新 2:我找到了一个 tut http://www.techotopia.com/index.php/Writing_iOS_4_Code_to_Hide_the_iPhone_Keyboard_%28Xcode_4%29,但它使用 XCode 4 上的 XIB 文件而不是情节提要。如何用故事板做到这一点?

myViewController.h

@interface myViewController : UIViewController <UITextFieldDelegate>
{
    UITextField *myTextField;
}

@property (retain, nonatomic) IBOutlet UITextField *myTextField;

myViewController.m

- (BOOL)textFieldShouldReturn: (UITextField *)textField {
    [textField resignFirstResponder];
    return YES;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    myTextField.delegate = self;
}

- (IBAction)DoCalc:(id)sender {
      // ...
}

【问题讨论】:

  • 因为 textField 是在 IB 中创建的。它是否与 myTextField 参考相关。此外,myTtextField 中有一个额外的字符“T”。
  • 感谢我修复了 T 但隐藏键盘的问题与它无关:)

标签: iphone objective-c ios


【解决方案1】:

检查您写入 myViewController.m 的 textFieldShouldReturn 函数是否被调用。在其中设置一个断点,然后运行模拟器。按键盘上的返回键。如果程序没有中断,那么您编写的函数就不会被调用。

如果是,那是因为您没有将 UIResponder 职责委派给您的视图控制器。确保您将响应者职责委派给您正在使用的 UITextField 的 myViewController 类。

在情节提要中,您可以通过控制从 UITextField 小部件拖动到场景下方的黄色球体,然后从出现的上下文菜单中选择“委托”来执行此操作。

【讨论】:

    【解决方案2】:

    textFieldShouldReturn: 应该返回 NO 来隐藏键盘。还有一件事 - 不要将第一响应者设置为 self[textField resignFirstResponder] 就足够了,iOS 应该自己计算 nextResponder

    【讨论】:

    • 谢谢我试过了,但它仍然不能工作另一个建议? :)
    • 如果你实现了textFieldShouldEndEditing: 方法,它应该返回YES。
    • 不,我没有实现 textFieldShouldEndEditing
    • 更新:我看到了一些关于文件所有者的信息。我不明白如何在 XCode4 中执行此操作我使用情节提要,但看不到任何文件所有者图标。
    【解决方案3】:

    你可以在这个方法中隐藏键盘...

    - (void)textFieldDidEndEditing:(UITextField *)textField {
    
         [textField resignFirstResponder];
    }
    

    【讨论】:

    • 谢谢 我也试过了,但是还是不行:)
    • 您是否设置了文本字段委托?
    • 天气这个方法需要你吗?
    • 更新:我看到了一些关于文件所有者的信息。我不明白如何在 XCode4 中执行此操作我使用情节提要,但看不到任何文件所有者图标。
    【解决方案4】:

    删除[self becomeFirstResponder]; 应该可以。

    resignFirstResponder 是关闭键盘。而becomeFirstResponder 是打开键盘。因此,在您的代码中,您正在关闭然后同时再次打开键盘。最后一个动作是打开键盘,因此不会关闭。

    您可以将UIResponder Class 视为UITextField 的超类

    【讨论】:

    • 是的,我删除了它(我按照 tut 说要这样做)。还是不行。
    • 更新:我看到了一些关于文件所有者的信息。我不明白如何在 XCode4 中执行此操作我使用情节提要,但看不到任何文件所有者图标。
    • 我认为textFieldShouldReturn 甚至没有被调用。您应该检查情节提要中的 UITextField 链接。
    • “链接”是什么意思?对不起,我是初学者。
    • UITextField 连接到文件所有者中的IBOutlet
    猜你喜欢
    • 2015-05-29
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多