Objective c IOS从另一个视图访问一个视图
基本上我有一个视图控制器,它有两个子视图。我想把这些观点联系起来。触摸事件应从另一个视图触发事件,反之亦然。我考虑过两种解决办法 1-)通过视图控制器访问视图 2-)每个视图都有指向另一个视图的指针 我是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:
@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个以上的视图。这使情况变得更困难。例如,我现在正在检查它。谢谢详细的答案!首先和最后的方法似乎不好,我将与代表一起去。