- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我最近遇到了无法从 UIScrollView
中注册触摸事件(touchesMoved
等)的问题。在与很多人交谈并阅读了大量帖子后,事实证明 UIScrollView
本身不接受触摸,而是需要将触摸传递给 UIScrollView
子类。
我是 objective-c 的新手,我花了很长时间思考如何定义子类(在单独的 .h/.m 文件中或以某种方式在 @interface 或其他东西中),以及 iOS 如何处理与响应链。
请让我描述一下我的具体情况,任何愿意用菜鸟语言解释我需要做什么的人都将不胜感激。
我的应用程序中只有一个页面,我将它的默认 UIView
更改为 UIScrollView
,所以如果我在 InterfaceBuidler
中检查它我看到的是我的 SampleViewController
和 UIScrollView
。我将 UIScrollView
链接到 SampleViewControler.h
的 @Interface
,如下所示:
#import <UIKit/UIKit.h>
@interface SampleViewController : UIViewController
{
}
@property (strong, nonatomic) IBOutlet UIScrollView *mainScroller;
@end
我在 SampleViewController.m
中引用了我的 UIScrollView
,如下所示:
#import "SampleViewController.h"
@interface SampleViewController ()
@end
@implementation SampleViewController
@synthesize mainScroller = _mainScroller;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"Movement!");
}
-(void)viewWillAppear:(BOOL)animated
{
[_mainScroller setContentOffset:CGPointMake(0,0) animated:YES];
}
如果我将 UIScrollView
的类更改为 UIView
,则会检测到触摸并触发一些 NSLog
消息。但是,一旦 UIView
设置回 UIScrollView
,触摸将被忽略。
据我了解,我需要使用以下代码设置 UIScrollView
的子类:
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"Movement!");
}
...然后更改我的 SampleViewController.m 以获得代码:
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[[self.nextResponder nextResponder] touchesMoved:touches withEvent:event];
}
但是,我真的不明白 1) 如何设置这样的子类,以及 2) 为什么这会起作用,因为我不明白为什么 [[self.nextResponder nextResponder] touchesMoved:touches withEvent: event];
将首先从 SampleViewController.m
中调用,因为我类似的 NSLog(@"Movement!");
语句永远不会执行。
我已经尝试了我能找到的所有教程,并且正在转向 SE 的专业知识!谢谢。
最佳答案
你想错了。如果您想知道 scrollView 何时移动,则无需对其进行子类化。 iOS 已在 UIScrollViewDelegate
中设置了您需要的所有方法。但是,如果您想说,为基于 scrollView 的项目选择 touchEvents,那完全没问题。然后,您只需要对 scrollView 中的项目进行子类化,然后在各自的类中选择 touchEvents。但是对于标准的 scrollView 方法,你应该这样设置:
.H
#import <UIKit/UIKit.h>
@interface SampleViewController : UIViewController<UIScrollViewDelegate>
{
}
@property (strong, nonatomic) IBOutlet UIScrollView *mainScroller;
@end
.M
#import "SampleViewController.h"
@interface SampleViewController ()
@end
@implementation SampleViewController
@synthesize mainScroller = _mainScroller;
-(void)viewDidLoad
{
self.mainScroller.delegate=self;//Adopt the delegate for the scrollView..this is the important line
}
然后只需实现 UIScrollViewDelegateMethods 来抓取移动等。当试图在 scrollView/tableView 中拾取 touchEvents 时会发生未定义的行为,因为 scrollView 本身已经在幕后实现了这些 touchEvents
查看开发者网站上的所有方法并在您的 .M 文件中实现它们。由于您在 viewDidLoad 中采用了委托(delegate),因此这些将是您的 scrollView 回调。我之前已经列出了其中的一些,但请继续查看 UIScrollViewDelegate Protocol site
– scrollViewDidScroll:
– scrollViewWillBeginDragging:
– scrollViewWillEndDragging:withVelocity:targetContentOffset:
– scrollViewDidEndDragging:willDecelerate:
– scrollViewShouldScrollToTop:
– scrollViewDidScrollToTop:
– scrollViewWillBeginDecelerating:
– scrollViewDidEndDecelerating:
关于ios - 如何设置 UIScrollView 的子类来响应触摸事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17077242/
我有这个 html 代码: HELLO WORLD! X V HELLO WORLD! X V 我想按 X(类关闭)将父 div 的高度更改为 20px 并显示 V(类打开),但在每个 d
在会计应用程序的许多不同实现中,有两种主要的数据库设计方法来保存日志和分类帐数据。 只保留 Journal 信息,然后 Ledger 只是 Journal 的一个 View (因为 journal 总
我想在另一个子里面有一个子, sub a { sub b { } } 我想为每次调用 sub b 创建一个新的 sub a 实例。有没有办法在 Perl 中做到这一点? 当我运行上面的
我有一些代码正在查找重复项并突出显示单元格: Private Sub cmdDups_Click() Dim Rng As Range Dim cel As Range Set Rng = ThisW
可能有一个简单的解决方案,但我很难过。 我有一个包含一个 ID 字段的主表。在两个可能的字段中有一个具有该 ID 的子表。想象一个由选手 A 和选手 B 组成的 double 队。Master 表将有
假设我有一个包含对象的数组: [ { "id": "5a97e047f826a0111b754beb", "name": "Hogwarts", "parentId": "
我正在尝试对 MySQL 数据库表执行一对父/子模型的批量插入,但似乎无法使用标准的 ActiveRecord 功能来完成。所以,我尝试了 activerecord-import gem,但它也不支持
我有一个带有多个子类的父抽象类。最终,我希望通过 GUI 中的进度条显示子类中完成的进度。 我目前所做的,我意识到这是行不通的,是在父类中声明为每个子类将覆盖的虚拟方法的事件方法定义。所以像: pub
是否可以通过键数组在对象中设置变量?例如我有这个对象: var obj = {'outer': {'inner': 'value'} }; 并希望设置由键数组选择的值: var keys = ['ou
我有一个名为 companies 的 MySQL 表,如下所示: +---------+-----------+-----------+ | id_comp | comp_name | id_pare
我正在尝试使用 sublime text 在 sublime text 上的 ionic 上打开我的第一个应用程序。它给了我一个“找不到命令”的错误。如何修复? 我试过这些命令: sudo rm -r
不好意思问,但我正在使用 webapp2,我正在设计一个解决方案,以便更容易定义路由 based on this google webapp2 route function .但这完全取决于能够在子级
我有代表树的数字字符串(我不知道是否有官方名称): 012323301212 上面的例子代表了 2 棵树。根用 0 表示。根的直接子代为“1”,“1”的直接子代为“2”,依此类推。我需要将它们分组到由
是否可以在当前 Activity 之上添加 Activity 。例如,假设我单击一个按钮,然后它将第二个 Activity 添加到当前 Activity 。而第二个 Activity 只覆盖了我当前
我很难思考如何为子资源建模。 以作者的书籍为例。你可以有 N 本书,每本书只有一位作者。 /books GET /books POST /books/id PUT /books/id DELETE 到
有人可以向我解释以下内容(python 2.7) 来自已解析文件的两个字符串数字: '410.9''410.9 '(注意尾随空格) A_LIST = ['410.9 '] '410.9' in '41
背景 在 PowerShell 中构建 hash table 是很常见的通过特定属性快速访问对象,例如以 LastName 为基础建立索引: $List = ConvertFrom-Csv @' I
我真的很难弄清楚如何调用嵌套 Polymer Web 组件的函数。 这是标记: rise-distribution组件有 canPlay我想从 rise-playlist
我写了一个小工具转储(以 dot 格式)一个项目的依赖关系图,其中所有位于同一目录中的文件都聚集在一个集群中。当我尝试生成包含相应图形的 pdf 时,dot开始哭: 命令 dot -Tpdf trim
给定一个 CODE ref,是否可以: 访问该 CODE ref 的解析树 通过指定 CODE ref 的解析树来创建一个新的 CODE ref,该解析树可以包含在 1 中返回的解析树的元素 通常我们
我是一名优秀的程序员,十分优秀!