首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当事件不是由UIButton生成时,是否可以使用委托发送消息?

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

Stack Overflow用户
提问于 2017-08-12 07:57:15
回答 1查看 48关注 0票数 0

我想知道如何使用委托从一个名为MotionListener的类向MotionListener发送时钟消息,但是很难将苹果对target-action的解释转换成一个可行的命令。

目标-动作是一种设计模式,在这种模式中,当事件发生时,对象保存向另一个对象发送消息所需的信息。存储的信息包括两项数据:一个动作选择器(它标识要调用的方法)和一个目标(它是接收消息的对象)。]1

我在使用myButton的示例(下面)中使用委托向被按下的名为fromButtonInSubview的目标发送消息时,我没有遇到任何问题。

代码语言:javascript
复制
        [mySyncButton addTarget:self.delegate
                         action:@selector(fromSyncButtonInSubview:)
               forControlEvents:UIControlEventTouchUpInside];

我假设,为了发送不来自UIButton,的信号,我仍然需要声明协议a,给它一个属性c,并包括初始化方法b。

一个

代码语言:javascript
复制
    @protocol SyncDelegate <NSObject>

    -(void)fromSync:(int)clock;

    @end

    @interface MotionListener : NSObject {

    }

B

代码语言:javascript
复制
    - (id) initMotionSensingWith:(float)updateInterval;

C

代码语言:javascript
复制
    @property (assign) id<SyncDelegate> delegate;

    @end

并在接口d中声明协议,并在实现e中添加目标方法。

D

代码语言:javascript
复制
    @interface PlayViewController : UIViewController <SyncDelegate>

E

代码语言:javascript
复制
    - (void)fromSync:(int)clock
    {
        NSLog(@"tick"); // do stuff and show
    }

然后在MyViewController,导入MotionListenerf中,在实现g中声明它并定义委托h

F

代码语言:javascript
复制
    #import "MotionListener.h"

G

代码语言:javascript
复制
    MotionListener *sync = [[MotionListener alloc] initMotionSensingWith:(float)updateInterval];

H

代码语言:javascript
复制
    sync.delegate = self;

但是,尽管重新阅读了上面引用的解释,在几次失败的尝试之后,我还没有编写一个命令,将同步信号从MotionListener发送到MyViewController.,我知道在UIButton示例(上面)中,它将产生addTarget:self.delegateaction:@selector(fromSync:)的效果。在任何人建议NSTimer selector,之前,我已经在50赫兹计时,而同步信号是1赫兹。

例如:

代码语言:javascript
复制
     [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时发送同步消息?答案可能是令人尴尬的简单,但我可以穿,如果你能帮忙。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-12 08:05:36

我不确定我是否正确地理解了你的代码。但是,我认为您只需将您的// send the sync message here行替换为调用您的代表,比如[self.delegate fromSync:WHATEVERVALUEYOUWANTTOINFORMABOUT];

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45647941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档