经过一番研究,我意识到 UIScrollView 有一个内置的委托协议。这意味着您根本不必对它进行子类化。
在您的视图控制器头文件中,找到这一行:
@interface MyViewController : UIViewController {
并将其更改为:
@interface MyViewController : UIViewController <UIScrollViewDelegate> {
假设您正在使用 Interface Builder,打开它并找到您的滚动视图对象。选择它,打开连接检查器,然后将“代表”出口连接到您的视图控制器。回到 Xcode 并打开视图控制器的实现文件。添加方法:
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
NSLog(@"Here is where you do whatever it is that you're trying to do!");
}
应该是这样的。如果您需要更多说明,请告诉我。
我的答案的先前版本:
最好的方法是通过委托系统。您的滚动视图将具有如下属性:
@property(nonatomic,assign) id<MyScrollViewDelegate> delegate;
然后你可以为你的委托定义一个协议,如下所示:
@protocol MyScrollViewDelegate <NSObject>
- (void)methodName;
@end
注意:您需要在属性行之前对委托进行前向引用,然后定义方法。它的前向参考只是
@protocol MyScrollViewDelegate;
.
在视图控制器的头文件中,确保导入滚动视图的头文件,然后将对象的父类从 更改
UIViewController
为
UIViewController
<MyScrollViewDelegate>
.
然后,当您在视图控制器中创建滚动视图时,将其委托属性设置为self
(如果这是您制作 UI 的方式,您可以在 Interface Builder 中执行此操作。在这种情况下,请确保在输入IBOutlet
之前添加关键字id
你的
@property
。)
最后,要从滚动视图调用视图控制器,您将运行以下代码:
[self.delegate methodName];
就是这样!