【发布时间】:2011-04-20 19:49:24
【问题描述】:
我有一个视图控制器,它具有三个滚动视图作为子视图。我想让子滚动视图在页面发生更改时通知父视图控制器。
我想我会通过设置委托模式来做到这一点。我的孩子(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: 这两个方法没有被调用!这意味着我实际上已经失去了对滚动视图的控制。
我做错了吗?或者有没有更好的方式让子子视图将消息发回给他们的父母?
【问题讨论】:
-
三个滚动视图都有自己的控制器实例吗?为什么将“自我”设置为代表?通常你会让父母创建孩子并将自己设置为委托。
标签: objective-c delegates uiscrollview uiscrollviewdelegate