Objective c IOS从另一个视图访问一个视图

Objective c IOS从另一个视图访问一个视图,objective-c,ios,uiview,uiviewcontroller,Objective C,Ios,Uiview,Uiviewcontroller,基本上我有一个视图控制器,它有两个子视图。我想把这些观点联系起来。触摸事件应从另一个视图触发事件,反之亦然。我考虑过两种解决办法 1-)通过视图控制器访问视图 2-)每个视图都有指向另一个视图的指针 我是IOS的新手,据我从其他问题中了解到的,不建议从视图访问视图控制器。你们建议我怎么做 编辑: 我在编码方面没有多大进展,但我的第一个观点是: @interface PaintView : UIView -(id)initWithFrame:(CGRect)frame andController:

基本上我有一个视图控制器,它有两个子视图。我想把这些观点联系起来。触摸事件应从另一个视图触发事件,反之亦然。我考虑过两种解决办法

1-)通过视图控制器访问视图

2-)每个视图都有指向另一个视图的指针

我是IOS的新手,据我从其他问题中了解到的,不建议从视图访问视图控制器。你们建议我怎么做

编辑:

我在编码方面没有多大进展,但我的第一个观点是:

@interface PaintView : UIView
-(id)initWithFrame:(CGRect)frame andController:(ViewController*)ctrl;
我将控制触摸事件并访问我的viewcontroller:

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
     //[self.controller somethingThatAccessToOtherView]
}

第二个视图与该视图非常相似。

UIViewController
的子类中,应该有两个成员。这些成员将代表每个子视图

现在,在
UIViewController
的子类中,添加您感兴趣的触摸方法。在该方法中,识别生成任何触摸事件的视图

根据需要,将事件传递给其他视图


您不应该将UIViewController作为
UIView
子类的iVar。

为什么不使用委托模式呢
因为这两个视图相互通信。。 它本质上类似于“每个视图都有指向另一个视图的指针”,但方式更加灵活


它是一个so线程,如果您希望以最简单、最脏且不推荐的方式进行操作,则

。使用某种独特的标记(例如,-20和-21等)标记两个视图

[v1 setTag:-20];
[v2 setTag:-21];
[self.superview viewWithTag:-20];
然后你可以从,比如说,v2,做下面的事情

[v1 setTag:-20];
[v2 setTag:-21];
[self.superview viewWithTag:-20];
获取对v1的引用。然而,这假设了相同的superview,并且不是一种很好的方法,除非您确定视图继承人不会改变(我说的是,这是您制作的一个小部件,其他人都不会碰它,而且您已经很好地记录了它)

更好的方法是使用委托模式。ViewController是每个子视图的委托。触摸时,子视图调用以下方法

[delegate iwastouched:self];
委托有一个方法,如

-(void) iwastouched:(UIView *) someview {
     if(someview == v1){
         //view 1 was touched, do something to view two
     }
     if(someview == v2){
         //view 2 was touched, do something to view one
     } 
}

另一种不好的方法是使用通知。见鬼,有很多种方法可以做到这一点。有些方法不太好。

您使用自定义UIView吗?我添加了一些代码来显示我的视图。但是在这种情况下,我必须控制哪个视图中有触摸事件。这对开发人员来说不是额外的负担吗计算它?但是视图可以旋转,开发人员可以有2个以上的视图。这使情况变得更困难。例如,我现在正在检查它。谢谢详细的答案!首先和最后的方法似乎不好,我将与代表一起去。