代码之家  ›  专栏  ›  技术社区  ›  Greg

当事件不是由UIButton生成时,是否可以使用委托发送消息?

  •  0
  • Greg  · 技术社区  · 7 年前

    MyViewController 来自一个名为 MotionListener 但是我在翻译苹果对 target-action 变成一个可行的命令。

    目标动作是一种设计模式,在该模式中,一个对象持有向另一个对象发送消息所需的信息 动作选择器,用于标识要调用的方法,以及 目标,即接收消息的对象。] 1

    在示例中 (如下) 具有 myButton fromButtonInSubview 无论何时按下

            [mySyncButton addTarget:self.delegate
                             action:@selector(fromSyncButtonInSubview:)
                   forControlEvents:UIControlEventTouchUpInside];
    

    我假设为了发送一个不是来自 UIButton, 我还需要申报协议 [a] [c] 并包括初始化方法

        @protocol SyncDelegate <NSObject>
    
        -(void)fromSync:(int)clock;
    
        @end
    
        @interface MotionListener : NSObject {
    
        }
    

    [b]

        - (id) initMotionSensingWith:(float)updateInterval;
    

    [c]

        @property (assign) id<SyncDelegate> delegate;
    
        @end
    

    并在接口中声明协议 [d]

    [d]

        @interface PlayViewController : UIViewController <SyncDelegate>
    

    [e]

        - (void)fromSync:(int)clock
        {
            NSLog(@"tick"); // do stuff and show
        }
    

    MyViewController, 进口 MotionListener ,在实现中声明 并定义代表 [h]

        #import "MotionListener.h"
    

    [g]

        MotionListener *sync = [[MotionListener alloc] initMotionSensingWith:(float)updateInterval];
    

    [h]

        sync.delegate = self;
    

    MyViewController. 我知道这会产生 addTarget:self.delegate action:@selector(fromSync:) UIButton 实例 在任何人建议之前 NSTimer selector, 我已经在50赫兹的时钟,而同步信号是1赫兹

    例如

         [NSTimer scheduledTimerWithTimeInterval:0.02;  // 50 Hz
                                          target:self
                                        selector:@selector(motionRefresh:)
                                        userInfo:nil
                                         repeats:YES];
    
        - (void)motionRefresh:(id)sender
        {
            count = (count + 1) % 50;  // every 1 second
    
            if (count == 0 ) 
            {
                // send the sync message here
                // EDIT
                NSLog(@"sending %i", count);
                [self.delegate fromSync:(int)count];
            }
        }
    

    所以我的问题是:使用代理,我如何每次发送同步消息 count 转动 0

    1 回复  |  直到 7 年前
        1
  •  1
  •   André Slotta    7 年前

    // send the sync message here 与您的代表通话,如 [self.delegate fromSync:WHATEVERVALUEYOUWANTTOINFORMABOUT]; .