UIScrollView实现委托
问题描述:
我有一个视图控制器有三个滚动视图作为子视图。我希望每当页面发生变化时,子视图滚动视图都会通知父视图控制器。UIScrollView实现委托
我以为我会通过设置委托模式来做到这一点。我的孩子(的UIScrollView的子类)设置它在头文件:
@interface TriptychScrollView : UIScrollView <UIScrollViewDelegate> {
id delegate;
}
- (id)delegate;
- (void)setDelegate:(id)newDelegate;
@end
@protocol RCScrollDidChange
@optional
- (void)scrollView:(TriptychScrollView *)scrollView imageDidChange:(NSNumber *)index;
@end
源文件具有委托存取方法:
- (id)delegate {
return delegate;
}
- (void)setDelegate:(id)newDelegate {
delegate = newDelegate;
}
不幸的是,这意味着我的委托设置为自己的呼叫被忽略:
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self setDelegate:self];
}
return self;
}
..因此,这两种方法scrollViewDidScroll:
和scrollViewDidEndDecelerating:
没有得到所谓的!这意味着我已经有效地失去了对滚动视图的控制。
我这样做不正确吗?或者,有没有更好的方式让孩子子视图发送消息给他们的父母?
答
我可能不明白整个问题,但我没有看到实现自己的UIScrollView的子类的原因,如果你坚持这样做,不要阴影它的.delegate属性或确保并调用超级。
假设所有这些scrollviews的其他一些观点载;:
我会通过执行以下处理这个
UIScrollView *a = ....
a.delegate = self;
a.tag = 1;
UIScrollView *b = ....
b.delegate = self;
b.tag = 2;
UIScrollView *c = ....
c.delegate = self;
c.tag = 3
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView.tag == 1)
//handle a
else if (scrollView.tag == 2)
//handle b
else if (scrollView.tag == 3)
//handle c
}
三个滚动视图都有自己的控制器实例吗?你为什么设置“自我”作为代表?通常你会让父母创建孩子并将自己设置为委托。 – JAgostoni 2011-04-20 20:21:13