2013-04-04 51 views
0

有人可以提供一些示例和正式模式,用于在UIViewController之间进行一对一事件传输吗?我认为NSNotificationCenter不适用于此用例,因为它基于事件总线和广播模式进行广泛的状态更改,因此应该用于一对多传输。我知道KVO在这种情况下不适用于,所有也是如此,因为它通常用于经典MVC领域中的模型和控制器层之间的通信。所以现在我只知道一种一对一的事件传输方式:委托模式。但可能会有更优雅和simplenoteasy解决方案。无法正确地向其他视图控制器发送UIButton事件

+0

需要使用代表.. – lakesh 2013-04-04 17:24:13

+0

即使协议也可以使用。 – 2013-04-04 17:25:20

回答

3

例如:

在视图的动作发送到:

#import "MapView.h" 

@interface MapViewController : UIViewController<MapViewDelegate> 
{ 

} 

.m 

MapView *map = [[MapView alloc] init]; 
map.delegate = self; 

-(void)MapImageButtonClicked:(UIButton*)sender 
{ 
//implement the necessary functionality here 
} 

@protocol MapViewDelegate <NSObject> 

@required 

-(void)MapImageButtonClicked:(UIButton*)sender; 

@end 

@interface MapView : UIView 
{ 
    UIButton *mapButton; 
    id   mapViewDelegate; 
} 

@property(nonatomic,retain)  id    mapViewDelegate; 
@property(nonatomic,retain)  UIButton  *mapButton; 

的.m

[mapButton addTarget:self.delegate action:@selector(mapImageButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; 

在视图的动作将从发送

希望你得到我数据包络分析。请根据您的情况实施。

0

你可以把这个方法在协议中您的视图界面:

@protocol MyViewWithButtonDelegateProtocol<NSObject> 

-(void)myButtonAction:(id)sender; @end 
  • 你把NSObject的或UIView的类型称为委托一个新的属性在视图 具有按钮。
  • 您让您的视图必须处理符合该协议的动作,并且它在视图中指定委托人属性为 self。
  • 你在你的视图控制器实现中实现myButtonAction。
  • 现在你只需做[myButton setTarget:delegate action:@selector(myButtonAction :) forControlEvents:UIControlEventTouchUpInside] ;.
相关问题