gpt4 book ai didi

objective-c - 其他类委托(delegate)的返回值

转载 作者:行者123 更新时间:2023-12-04 18:18:16 24 4
gpt4 key购买 nike

我创建了一个类(UIView),里面有一个 UIScrollview。通过委托(delegate)“scrollViewDidEndDecelerating”,我可以获得 3 个结果(1、2、3)。
如何将此结果发送到主 ViewController?

ViewController header

#import "Picker.h"

ViewController 实现
picker = [[Picker alloc]initWithFrame:CGRectMake(10, 10, 300, 300)];
[self.view addSubview:picker];

选择器实现
(...)

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {

if (scrollView.contentOffset.x <= 100) {

int result = 1;

} else if (scrollView.contentOffset.x > 100 && scrollView.contentOffset.x <= 200) {

int result = 2;

} else {

int result = 3;

}
}

(...)

我必须创建一个 UIView 类,因为它除了 Scrollview 之外还有其他东西。

谢谢!

最佳答案

您可以在 Picker 中定义一个属性。类(class):

@property (nonatomic, assign) MyViewController* controller;

并像这样初始化 Picker 的实例:
picker = [[Picker alloc]initWithFrame:CGRectMake(10, 10, 300, 300) andController:self];

那么你可以这样做:
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {

[self.controller myMethod];
...

这被称为依赖注入(inject),如果在两个类之间创建如此强的耦合是有意义的,那就可以了。您可以创建一个委托(delegate)协议(protocol)来为此类交互提供更完整的状态。

您拥有的另一个选项是通过 NSNotificationCenter 使用通知来避免耦合。 .

在这种情况下,一个对象(您的 Controller )将注册以观察 PickerScrollViewChanged通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMethod:) name:kPickerScrollViewChanged object:nil];

一个 picker将从其 scrollViewDidEndDecelerating 发送此类通知方法:
[[NSNotificationCenter defaultCenter] postNotificationName:kPickerScrollViewChanged object:self];

关于objective-c - 其他类委托(delegate)的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11275880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com