无法正确地将UIButton事件发送到其他视图控制器

时间:2013-04-04 17:22:25

标签: ios objective-c cocoa-touch design-patterns

有人可以为UIViewController之间的一对一事件转移提供一些示例和正式模式吗?我认为NSNotificationCenter不适用于此用例,因为它基于广泛状态变化的事件总线和广播模式,这就是为什么应该用于一对多传输的原因。我知道KVO在这种情况下根本不适用,因为它通常用于经典MVC领域中模型和控制器层之间的通信。所以现在我只知道一对一事件转移的一种方式:委托模式。但可能会有更优雅的simple not easy解决方案。

2 个答案:

答案 0 :(得分:3)

例如:

在视图中,操作将发送至:

@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];

在视图中,操作将从以下位置发送:

#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
}

希望你能得到这个想法。请根据您的情况实施。

答案 1 :(得分:0)

您可以将该方法放在视图界面中的协议中:

@protocol MyViewWithButtonDelegateProtocol<NSObject>

-(void)myButtonAction:(id)sender; @end
  • 在视图中放置了一个名为delegate的NSObject或UIView类型的新属性 有按钮。
  • 你让必须处理行动的观点符合要求 协议以及它在视图中分配委托属性的时间 自
  • 在视图控制器实现中实现myButtonAction。
  • 现在你只需要做[myButton setTarget:delegate 行动:@选择(myButtonAction :) forControlEvents:UIControlEventTouchUpInside];