Objective c 调用“拥有”类的方法?

Objective c 调用“拥有”类的方法?,objective-c,methods,owner,Objective C,Methods,Owner,有没有办法调用所属类的方法?创建对象的类 情况是这样的:我的应用程序使用UIScrollView。我需要处理触摸事件,所以我没有直接使用UIScrollView,而是将其子类化并使用MyScrollView,这样我就可以实现touchSended:方法。MyScrollView的实例是在my View控制器类中创建的。下面是我的问题:在MyScrollView.m中的touchSended:方法中,我想从视图控制器类调用一个方法。有没有直接的方法?比如: [owner myMethod]; 我

有没有办法调用所属类的方法?创建对象的类

情况是这样的:我的应用程序使用UIScrollView。我需要处理触摸事件,所以我没有直接使用UIScrollView,而是将其子类化并使用MyScrollView,这样我就可以实现touchSended:方法。MyScrollView的实例是在my View控制器类中创建的。下面是我的问题:在MyScrollView.m中的touchSended:方法中,我想从视图控制器类调用一个方法。有没有直接的方法?比如:

[owner myMethod];
我现在的做法是在MyScrollView.m中包含MyViewController.h并创建其实例:

MyViewController *controller;
[controller myMethod];

似乎不对。有什么见解吗?

首先,即使是几个月前的问题,你的0%接受率也太差了,你应该尽快解决这个问题,让人们更有可能回答你未来的问题

即使您没有提到您正在使用的编程语言,在OO范例中,也没有办法解决对象的创建者,除非您对此做些什么

解决方案1 如果可以,请使构造函数接受创建类的新实例的对象以此方式传递的创建者或父参数。你们必须完全控制创造者和被创造者

解决方案2 也许不是100%适合你的情况,但这是工厂模式。通常,工厂是一个单例类,因此工厂创建的所有对象都应该具有访问工厂实例的方法。您可以将其与溶液1混合

解决方案3 反思。根据您的编程语言,当调用构造函数时,您可以尝试分析堆栈跟踪,并尝试获取调用方法的对象的引用

解决方案4 采用容器模式。如果你可以放弃创建者的概念,你可以,至少WordFrand和WebFras如何做,把控件看作是其他控件的容器。因此,您有一个从容器对象到所有包含对象的双重引用,以及一个在构造函数之后使用特定setter方法/*属性*设置的反向引用。因此,最终的结果不是对创建您的对象的引用,而是对包含您的对象的引用。同样,您应该完全控制代码

如果我是你,我会选择解决方案1或4
[编辑]:当我第一次写答案时,我看不懂你在使用Objective-C。我不是这方面的专家,我不知道是否有更好的解决方案,但我的答案可能只有3个是可行的。首先,即使是几个月前的问题,你的0%接受率也太差了,你应该尽快解决这个问题,让人们更有可能回答你未来的问题

即使您没有提到您正在使用的编程语言,在OO范例中,也没有办法解决对象的创建者,除非您对此做些什么

解决方案1 如果可以,请使构造函数接受创建类的新实例的对象以此方式传递的创建者或父参数。你们必须完全控制创造者和被创造者

解决方案2 也许不是100%适合你的情况,但这是工厂模式。通常,工厂是一个单例类,因此工厂创建的所有对象都应该具有访问工厂实例的方法。您可以将其与溶液1混合

解决方案3 反思。根据您的编程语言,当调用构造函数时,您可以尝试分析堆栈跟踪,并尝试获取调用方法的对象的引用

解决方案4 采用容器模式。如果你可以放弃创建者的概念,你可以,至少WordFrand和WebFras如何做,把控件看作是其他控件的容器。因此,您有一个从容器对象到所有包含对象的双重引用,以及一个在构造函数之后使用特定setter方法/*属性*设置的反向引用。因此,最终的结果不是对创建您的对象的引用,而是对包含您的对象的引用。同样,您应该完全控制代码

如果我是你,我会选择解决方案1或4
[编辑]:当我第一次写答案时,我看不懂你在使用Objective-C。我不是这方面的专家,我不知道是否有更好的解决方案,但我的解决方案可能只有3个是可行的。

经过进一步研究,我意识到UIScrollView有一个内置的委托协议。这意味着您根本不必对其进行子类化

在视图控制器头文件中,找到以下行:

@interface MyViewController : UIViewController {
并将其更改为:

@interface MyViewController : UIViewController <UIScrollViewDelegate> {
应该是这样。如果你需要更多的澄清,请告诉我

我先前的回答:

最好的方法是通过 代表制。您的滚动视图将 拥有这样的财产:

@property(nonatomic,assign) id<MyScrollViewDelegate> delegate;
就这样


经过进一步研究,我意识到UIScrollView有一个内置的委托协议。 这意味着您根本不必对其进行子类化

在视图控制器头文件中,找到以下行:

@interface MyViewController : UIViewController {
并将其更改为:

@interface MyViewController : UIViewController <UIScrollViewDelegate> {
应该是这样。如果你需要更多的澄清,请告诉我

我先前的回答:

最好的方法是通过 代表制。您的滚动视图将 拥有这样的财产:

@property(nonatomic,assign) id<MyScrollViewDelegate> delegate;
就这样


谢谢你的帮助,但我没听懂。首先,我还是应该将UIScrollView子类化,还是不?所有这些代码都进入MyViewController.h吗?methodName应该被触摸吗?什么是MyScrollViewDelegate?我没有那门课。我已经改变并澄清了我的答案。还有什么问题吗?谢谢你的帮助,但我没听懂。首先,我还是应该将UIScrollView子类化,还是不?所有这些代码都进入MyViewController.h吗?methodName应该被触摸吗?什么是MyScrollViewDelegate?我没有那门课。我已经改变并澄清了我的答案。还有问题吗?