Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone touchesbreated&x27;不回答_Iphone_Objective C_Ios - Fatal编程技术网

Iphone touchesbreated&x27;不回答

Iphone touchesbreated&x27;不回答,iphone,objective-c,ios,Iphone,Objective C,Ios,我想使用touchesbeent方法来了解用户何时在我的TableView中的UITextField之外录制内容 我有一个包含TableView的UIView,我有以下方法: - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"See a tap gesture"); UITouch *touch = [touches anyObject]; if(touch.phase==UITouchPhas

我想使用touchesbeent方法来了解用户何时在我的TableView中的UITextField之外录制内容

我有一个包含TableView的UIView,我有以下方法:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

NSLog(@"See a tap gesture");
UITouch *touch = [touches anyObject];
if(touch.phase==UITouchPhaseBegan){
    //find first response view
    for (UIView *view in [self.view subviews]) {
        if ([view isFirstResponder]) {
            [view resignFirstResponder];
            break;
        }
    }
}


[super touchesBegan:touches withEvent:event];
}


My self.view和My self.tableView都将userInteractionEnabled设置为YES,但由于某些原因,ToucheSBegind从未触发。有什么想法吗?

确保您已将对象设置为处理这些触摸事件:

[myButton addTarget:self action:@selector(buttonTouch:withEvent:) forControlEvents:UIControlEventTouchUpInside];
然后使用您声明的方法处理触摸事件:

- (IBAction) buttonTouch:(id) sender withEvent:(UIEvent *) event
为UIView更新(假设您已经创建并连接了插座):

然后:

- (IBAction) myTouchEvent:(id) sender withEvent:(UIEvent *) event
现在我了解了您要做的事情(在文本框外触摸时关闭键盘),有一个简单的解决方案几乎适用于所有场景)

步骤1-创建一个与放置TableViewController的视图大小相同的按钮。(大按钮)。 步骤2-将该按钮发送到后面(编辑器->排列->发送到后面) 第3步-将iAction连接到该按钮,并将其称为dismissKeyboardButtonPressed(提示如果您尚未使用助理编辑器,则应该使用) 步骤4-在iAction方法put中(假设您的TextField称为myTextField):

第5步-运行它。无论何时触摸文本框外视图中的任何位置,它都会关闭键盘


这是我几乎每次在视图上放置文本字段时都会使用的方法,在触摸文本字段外部时需要消除KB。

如果您的
UIView
包含您的
UITableView
,则表视图位于响应器链的顶部,触摸事件不会进入您的视图。但也许有更好的方法来做到这一点。你在找什么

更新

实现
UITextFieldDeletate
textFieldShouldReturn:
方法来拦截按下“Return”键:

-(BOOL)textFieldShouldReturn:(UITextField *)textField {
   [textField resignFirstResponder];
   return YES;
}
此外,UITableViewDelegate是UIScrollViewDelegate,因此您可以连接到这些方法以确定用户何时与表视图交互

一般来说,我认为你不必担心当用户触摸键盘外部时会立即关闭键盘,特别是当你在同一屏幕上有其他文本输入时

呻吟

好吧,这很公平,但是当你通过复合透明视图截取触摸事件时,事情开始变得复杂起来(这些视图也会变得昂贵),等等。你永远不知道将来升级应用程序时会产生什么样的影响,不仅对用户,对程序员都是如此

为什么不保持简单呢?只需一个“完成的”
uiBarButtonim
,或者一个半透明的
UIToolbar
,滑动到键盘/picker ala Mobile Safari的顶部,怎么样?这些解决方案是用户可以接受的,最终可以让用户的生活更轻松。通过将工件和功能划分为模块化单元,它们无疑使开发变得更容易

最后一个音符


我认为,在您的情况下,使用UIAPTgestureRecognitor将很难做到正确。我担心添加到表视图中的任何点击识别器都会阻止行选择或将控件移动到另一个UI元素(文本字段、开关等)。

尝试将点击手势识别器添加到表视图中。这样,您应该能够允许正常行为以及捕获点击事件来完成额外的工作。

我在我的一个应用程序中实现了类似的功能,我确实使用了文本字段而不是文本视图,但它仍然可以工作。我曾经

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [textField reresignFirstResponder];
}

在不进行任何检查的情况下,如果用户点击resignFirstResponder方法,则会调用该方法,但如果用户点击textView,则会触发它再次成为第一响应者,不会导致任何可见的更改。我已经在一个应用程序上实现了这个概念,在一个视图上有9个文本字段,我还没有遇到问题。

实际上,我想检测用户何时点击视图中的任何位置更新答案。无论您是否想要跟踪视图、按钮、标签、图像等的触摸事件,它都会起到相同的作用。您可以使用添加到视图中的UITapGestureRecognitor来完成此操作,这是一个不错的选择。我不知道如何做。我尝试了一些方法,但找不到使其正常工作的方法请参阅更新的答案-有一种更简单的方法可以完成您想要做的事情,它不仅适用于表视图和视图。我刚刚注意到一些事情。如果我减小tableView的大小,我就可以在它外面单击(在我的UIView中也是如此),在这种情况下它就可以工作了。所以问题是当我点击tableView时。我不知道该怎么做,我想你是对的。(见我在自己帖子上的评论)。我想做的是在用户点击tableView中的UITextField外部时隐藏键盘。实际上,我已经实现了textFieldShouldReturn。我也在尝试使用touchsbegind来处理其他事情(比如在用户选择完日期后隐藏一个日期选择器)是的,这就是我最终得到的结果。谢谢;)在本例中添加了关于使用手势识别器的最后一个注意事项。好吧,我的问题是touchesbeent方法从未被调用。这与tableView有关,但我找不到处理它的方法
-(BOOL)textFieldShouldReturn:(UITextField *)textField {
   [textField resignFirstResponder];
   return YES;
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [textField reresignFirstResponder];
}