我似乎无法弄清楚如何将scrollview的委托设置为scrollview中的viewcontroller。
ChildView *child = [[ChildView alloc] init];
_scrollview.delegate = child;
我的子视图控制器正在使用scrollview委托:
@interface ChildView : UIViewController <UIScrollViewDelegate>
但它不会调用scrollViewDidScroll;
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
NSLog(@"%f", scrollView.contentOffset.y);
}
基本上,我希望将scrollview的scrollview偏移量传递给嵌套在其中的视图控制器。
答案 0 :(得分:3)
您可以通过多种方式在Objective C中分配属性。
正如@Aaron所指出的,代理属性是使用assign设置的。这意味着如果您将委托设置的变量超出范围,则引用将变为无效。要解决这个问题,你必须保持一个指向周围对象的强指针,这样它就不会超出范围。
为此,请在主视图控制器中创建一个属性:
@property (strong, nonatomic) ChildView * child;
然后,在创建子视图时,将属性设置为等于它。
self.child = ChildView *child = [[ChildView alloc] init];
现在您可以设置委托,一旦您的函数终止,它就不会超出范围。
_scrollview.delegate = self.child;
答案 1 :(得分:1)
child
在委托方法触发时被解除分配。
来自UIScrollView.h:
@property(nonatomic,assign) id<UIScrollViewDelegate> delegate; // default nil. weak reference
这是一个弱引用,因此不会保留。要解决此问题,请在主视图控制器中创建strong
@property,并将其设置为child
。