[英]Pass scrollview delegate to child view controller
我似乎无法弄清楚如何在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偏移量传递到嵌套在其中的视图控制器。
您可以通过多种方式在Objective C中分配属性。
正如@Aaron指出的那样,委托属性是使用assign设置的。 这意味着,如果您将委托设置为的变量超出范围,则引用将变为无效。 为了解决这个问题,您必须保持指向该对象的强力指针,以使它不会超出范围。
为此,请在主视图控制器中创建一个属性:
@property (strong, nonatomic) ChildView * child;
然后,在创建子视图时,将属性设置为与其相等。
self.child = ChildView *child = [[ChildView alloc] init];
现在,您可以设置委托,并且一旦函数终止,它将不会超出范围。
_scrollview.delegate = self.child;
委托方法触发时, child
将被释放。
从UIScrollView.h:
@property(nonatomic,assign) id<UIScrollViewDelegate> delegate; // default nil. weak reference
这是一个较弱的参考,因此不会保留。 要修复此问题,请在主视图控制器中创建一个strong
@property,并将其设置为child
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.