Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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
Objective c 是否将键盘从UITextField中移除,将UITextView作为UIScrollView的子视图?_Objective C_Xcode_Uiscrollview - Fatal编程技术网

Objective c 是否将键盘从UITextField中移除,将UITextView作为UIScrollView的子视图?

Objective c 是否将键盘从UITextField中移除,将UITextView作为UIScrollView的子视图?,objective-c,xcode,uiscrollview,Objective C,Xcode,Uiscrollview,我有一个带有uicrollview的应用程序,作为UIView的子视图添加。我已经添加了UITextField,UITextview作为UIScrollView的子视图。我想在滚动视图中点击时关闭键盘。我该怎么做?试试这个 - (void)viewDidLoad { [super viewDidLoad]; UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:s

我有一个带有
uicrollview
的应用程序,作为
UIView
的子视图添加。我已经添加了
UITextField
UITextview
作为
UIScrollView
的子视图。我想在滚动视图中点击时关闭键盘。我该怎么做?

试试这个

- (void)viewDidLoad
{
   [super viewDidLoad];

      UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
      tapGesture.cancelsTouchesInView = NO;
      [scrollView addGestureRecognizer:tapGesture];
      [tapGesture release];
}
-(void)dismissKeyboard
{
    [txtNotes resignFirstResponder];
    [textView resignFirstResponder];
}

只需添加
uitappesturerecognizer

- (void)viewDidLoad
{
    [super viewDidLoad];
    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured:)];
    [scr addGestureRecognizer:singleTap];
}


- (void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture
{
    //Get touch point
    CGPoint touchPoint=[gesture locationInView:scr];

    //Hide keyBoard
    [self.view endEditing:YES];
}

当我将手势添加到
UIScrollView
的子类中时,我的视图树中的各种手势相互干扰,例如能够单击子视图、滚动视图以及在所有情况下关闭键盘。我提出了这个解决方案,它可以从
uicrollview
的超类或从
UIViewController
设置

DismissKeyboardTapSirture
类使用ARC,处理视图下的任何文本字段,并且不会从子视图(如按钮)接收任何单击。还利用iOS7的滚动效果关闭键盘

从UIScrollView超类设置:

    _dismissKeyboard = [[DismissKeyboardTapGesture alloc] initWithView:self];
或从UIViewController:

    _dismissKeyboard = [[DismissKeyboardTapGesture alloc] initWithView:self.view];
下面是课堂:

@interface DismissKeyboardTapGesture : NSObject <UIGestureRecognizerDelegate>

@end

@implementation DismissKeyboardTapGesture

- (id)initWithView:(UIView *)view
{
    self = [super init];
    if (self) {
        UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap:)];
        singleTap.cancelsTouchesInView = NO;
        singleTap.delegate = self;
        [view addGestureRecognizer:singleTap];

        if ([view respondsToSelector:@selector(setKeyboardDismissMode:)]) {
            // Bonus effect to dismiss keyboard by scrolling
            ((UIScrollView *)view).keyboardDismissMode = UIScrollViewKeyboardDismissModeInteractive;
        }
    }
    return self;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    // Don't stop any existing gestures in our view from working
    if (otherGestureRecognizer.view == gestureRecognizer.view) {
        return YES;
    }
    return NO;
}

- (void)singleTap:(UIGestureRecognizer*)gestureRecognizer
{
    // Close keyboard for any text edit views that are children of the main view
    [gestureRecognizer.view endEditing:YES];
}

@end
@interface dismisskeyboardtappostate:NSObject
@结束
@键盘手势的实现
-(id)initWithView:(UIView*)视图
{
self=[super init];
如果(自我){
UITapGestureRecognizer*singleTap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(singleTap:)];
singleTap.cancelsTouchesInView=否;
singleTap.delegate=self;
[查看AddGestureRecognitor:singleTap];
如果([view respondsToSelector:@selector(setKeyboardDismissMode:)])){
//通过滚动消除键盘的额外效果
((UIScrollView*)视图)。keyboardDismissMode=UIScrollViewKeyboardDismissModeInteractive;
}
}
回归自我;
}
-(BOOL)手势识别器:(UIGestureRecognizer*)手势识别器应与gestureRecognizer:(UIGestureRecognizer*)其他手势识别器同时识别
{
//在我们看来,不要阻止任何现有的姿态发挥作用
if(othergesturecognizer.view==gesturecognizer.view){
返回YES;
}
返回否;
}
-(无效)单键点击:(UIGestureRecognitor*)GestureRecognitor
{
//关闭作为主视图子视图的任何文本编辑视图的键盘
[手势识别器.视图编辑:是];
}
@结束

在iOS 7中,您可以轻松实现这一点

scrollView.keyboardDismissMode = UIScrollViewKeyboardDismissModeInteractive;

只需在UIView上添加UIAPTgestureRecognitor而不是UIScrollView