『IOS』UIScrollView无法响应touch事件的解决办法

本文介绍了一个解决UIScrollView在iOS应用中不响应touch事件的问题的方法。通过编写一个category,可以使得UIScrollView能够响应touch事件,从而实现如关闭键盘等操作。详细解释了touchEvents过程,包括如何将事件传递给下一层视图以及如何覆盖默认的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:http://blog.youkuaiyun.com/smking/article/details/8073747


下面这个方法使用的地方很多, 比如在一个UITextView中要加上点击方法,如在这个UITextView的左边和右边点击的事件分别为向上和向下翻页,估计就可以使用下面这个方法。不过尚进行进行验证。

转 自:http://blog.youkuaiyun.com/volcan1987/article/details/6677370


用过UIScrollView的都会发现UIScrollView不会响应touch事件,这样就无法在touchesEnd方法中做一些事情了,比如关闭键盘等等。其实写个category就可以解决这个问题了,直接上代码:

@implementation UIScrollView (UITouch)  
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event  
{  
    //if(!self.dragging)  
    {  
        [[self nextResponder] touchesBegan:touches withEvent:event];  
    }  
    [super touchesBegan:touches withEvent:event];  
}  
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event  
{  
    //if(!self.dragging)  
    {  
        [[self nextResponder] touchesMoved:touches withEvent:event];  
    }  
    [super touchesMoved:touches withEvent:event];  
}  
  
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event  
{  
    //if(!self.dragging)  
    {  
        [[self nextResponder] touchesEnded:touches withEvent:event];  
    }  
    [super touchesEnded:touches withEvent:event];  
}  
@end  


来自apple文档:touchesMoved:withEvent:

Declaration
SWIFT
func touchesMoved(_ touches: NSSet,
        withEvent event: UIEvent)
OBJECTIVE-C
- (void)touchesMoved:(NSSet *)touches
           withEvent:(UIEvent *)event
Parameters
touches	
A set of UITouch instances that represent the touches that are moving during the event represented by event.
event	
An object representing the event to which the touches belong.
Discussion
The default implementation of this method does nothing.
<pre name="code" class="objc">However immediate UIKit subclasses of UIResponder, particularly UIView, forward the message up the responder chain. To forward the message to the next responder, send the message to super (the superclass implementation); do not send the message directly to the next responder. For example,

Multiple touches are disabled by default. In order to receive multiple touch events you must set the a multipleTouchEnabled property of the corresponding view instance to YES.

If you override this method without calling super (a common use pattern), you must also override the other methods for handling touch events, if only as stub (empty) implementations.


 

注意:touchesMoved默认实现是 什么都不做

ios中事件从上层往下层派发(找到touch事件处理的当前视图,然后就由他接收),之后的响应处理(responder)从下往上传递(scrollview=》uiview=》uiviewcontroller=》uiwindow=》appdelegate)。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值