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

时间:2013-01-07 05:55:57

标签: objective-c ios uiview uiviewcontroller

基本上我有一个有两个子视图的视图控制器。我想要连接这些视图。触摸事件应该从另一个视图触发事件,反之亦然。我考虑过两个解决方案。

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

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

我是IOS的新手,到目前为止我从其他问题中读到了提到从视图访问视图控制器的建议。所以,你们建议我做什么?

编辑:

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

@interface PaintView : UIView
-(id)initWithFrame:(CGRect)frame andController:(ViewController*)ctrl;

我将控制触摸事件并访问我的viewcontroller:

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

并且第二个视图与那个视图非常相似。

2 个答案:

答案 0 :(得分:1)

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

here就是这样的话题而且 here是一个简单的教程

答案 1 :(得分:1)

如果您想要最简单,最脏和非推荐的处理方式。使用某种唯一标记标记您的两个视图(例如,使用-20和-21,或者其他东西。所以在您创建视图的视图控制器中,您可以执行以下操作。

[v1 setTag:-20];
[v2 setTag:-21];

然后你可以说,v2,以下。

[self.superview viewWithTag:-20];

获取对v1的引用。然而,这假设相同的超级视图,并且不是一个很好的做事方式,除非你确定视图heirachy不会改变(我在说,这是你做的小部件,没有其他人会触及你''无论如何都记录得很好)。

更好的方法是使用委托模式。 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
     } 
}

另一种不好的方法是使用通知。天哪,你可以用尽可能多的方法做到这一点。有些人不太好。