3

我使用这本书和第 4 章学习 iOS SDK ,当它告诉你如何用背景点击隐藏数字键盘时,我遇到了一个问题。我照着作者说的做,但什么也没发生。我怎么能做到这一点?什么书的作者说:

1) 在 ViewController.h 中创建新方法 backgroundTap

- (IBAction)touchBackground:(id)sender;

2) 在 ViewController.m 中添加方法

-(void)touchBackground:(id)sender{
[nameField resignFirstResponder];
[numberField resignFirstResponder];}

3) 将 Interface Builder 中 View 对象的类标识(正如我在 Xcode 4 中理解的那样)从 UIView 更改为 UIControl

4)将事件列表中的TouchDown方法与文件的所有者连接并检查方法backgroundTap。

这是我的代码示例

PS我很抱歉我的英语,我把书中的所有信息都翻译成英文,因为我有俄语翻译。

4

3 回答 3

5

我认为你可以通过实现这样的方法来简化它:

- (IBAction)backgroundTouched:(id)sender {
    [self.view endEditing:YES];
}

制作背景视图UIControl而不是UIView在界面构建器中,并将修饰事件与此方法挂钩。

看看这个小示例项目secondViewController我已经在触摸背景关闭键盘的地方做到了这一点。您还可以看到我如何将背景更改为UIControlinsecondViewController.xib

于 2011-12-24T19:13:46.070 回答
3

在不更改背景视图的情况下,您可能想尝试的是:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [nameField resignFirstResponder];
    [numberField resignFirstResponder];
}
于 2011-12-24T19:17:49.093 回答
1

您可能错误地执行了第 4 步(“将事件列表中的 TouchDown 方法与文件所有者连接并检查方法 backgroundTap”)。在您的 touchBackground 方法中包含一个 NSLog 以检查该方法是否被调用。

-(void)touchBackground:(id)sender{
[nameField resignFirstResponder];
[numberField resignFirstResponder];
NSLog(@"touchBackground was called");
}

如果消息(“touchBackground was called”)没有出现在您的控制台中,那么您知道 touchBackground 没有被调用。

于 2012-01-04T17:22:08.250 回答