繁体   English   中英

将scrollview委托传递给子视图控制器

[英]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中分配属性。

  1. 分配意味着简单地执行变量分配并将一个变量设置为等于另一个。 如果该变量超出范围,则将无法使用。 通常仅用于C原语。
  2. 告诉编译器保留对对象的引用,只要其他人强烈指向它即可。
  3. Strong告诉编译器对给定对象保持强引用。 这意味着,直到持有该对象的对象超出范围,该对象才不会超出范围。

正如@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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM