繁体   English   中英

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

[英]Can't send a UIButton event to other view controller correctly

有人可以提供一些示例和正式模式用于UIViewController之间的一对一事件传输吗? 我认为NSNotificationCenter不适用于此用例,因为它基于事件总线和广泛状态更改的广播模式,因此应将其用于一对多传输。 我知道, KVO是不是适用于这种情况在所有太,因为它通常用于传统的模型和控制器层之间的通信MVC境界。 所以现在我只知道一种一对一事件传输的方法:委托模式。 但是也许会有更优雅,更simple easy解决方案。

例如:

在视图中,操作被发送到:

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

希望你能明白。 请根据您的情况实施。

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

@protocol MyViewWithButtonDelegateProtocol<NSObject>

-(void)myButtonAction:(id)sender; @end
  • 您在具有按钮的视图中放置了一个名为Object的NSObject或UIView类型的新属性。
  • 您使必须处理该操作的视图符合该协议,并在该视图启动时将委托属性分配给self。
  • 您可以在视图控制器实现中实现myButtonAction。
  • 现在您只需执行[myButton setTarget:delegate action:@selector(myButtonAction :) forControlEvents:UIControlEventTouchUpInside];。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM