Tag: 事件

MonoTouch中的弱事件模式

我曾经使用Objective-C语言开发iOS应用程序,并依靠dealloc方法在我的应用程序中执行一些清理/取消注册任务。 现在在MonoTouch(垃圾收集),它不是一个选项了。 假设我有一个UIViewController ,作为它的View属性的子视图添加MyView ( UIView子类)的一个实例。 MyView进而注册自己接收来自另一个manager / global对象的一些事件,以便它知道如何相应地更新自己(例如: onlineProfilesManager.Refreshed += () => <update UI with the new state>; )。 只要MyView在屏幕上,一切都很好。 但是,我必须知道它何时从屏幕上移除,以便我可以从事件处理程序中取消注册MyView 。 在Obj-C中,这可以简单地在dealloc方法中完成,因为当屏幕更改时, UIViewController被解除分配 – > MyView从它的超级视图中移除,然后调用MyView dealloc方法。 在Monotouch中,我不再有这种“确定性”的stream程。 我试图把一些打印语句在UIViewController和MyView析构函数,但他们从来没有被调用(原因是因为MyView仍然注册的事件处理程序,因为我不知道什么时候/如何取消注册,它永远不会解除分配)。 有没有人知道在MonoTouch中处理这种情况的“模式”是什么? 我想我错过了一个基本的概念,并陷入困境开发我的应用程序。 提前致谢。 编辑我正在编辑我的问题,因为看起来像我的问题的解决scheme是使用弱事件模式,但我没有find一个MonoTouch平台的实现。 有谁知道如何在MonoTouch中使用弱事件模式 ?

viewDidAapp不会在应用程序进入前景后再次开启

我已经在我的iPhone应用程序代码中追踪了一个问题,并不总是触发viewDidAppear方法。 当您启动应用程序事件触发预期。 但是,如果我closures应用程序使用能够多任务处理,并重新打开我的viewDidAppear事件不再触发。 我的意见是从尼布加载,我使用viewDidUnload清理(释放和零所有网点)。 我的意见是嵌套在侧面和标签栏然后导航控制器。 我看起来像事件没有正确连接时,笔尖重新加载。 任何想法,我做错了/失踪,我怎么能解决这个问题? 提前致谢。 更新我不是说应用程序第一次进入前台时事件不会被解雇。 我的意思是事件再也不会发生。 即使在选项卡之间切换或移动导航视图时也是如此。 例: – (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; NSLog(@"viewDidAppear called"); } 这段代码放在两个视图中,每个视图都在不同的选项卡上。 每次我在标签之间切换“viewDidAppear called”被写入日志。 当我closures并重新打开应用程序和切换标签之间不再发生。 其他button事件正常启动。

传递触摸事件到适当的兄弟UIViews

我试图处理触摸事件touchesBegan覆盖到父UIView但也允许触摸input传递到兄弟UIView底下。 我预计会有一些直接的方式来处理触摸事件,然后说“现在发送给下一个响应者,就好像这个不存在”,但我能find的是下一个nextResponder方法,它似乎是给将父项返回到覆盖视图。 那父母是不是真的把它传递到覆盖视图的下一个兄弟,所以我卡住不确定如何做什么似乎是一个简单的任务,通常是通过触摸callback获得一个真或假返回值来告诉它是否继续处理小部件层次结构。 我错过了什么明显的?

在iPad上运行Mobile Safari时即将切换的页面隐藏事件不会触发

众所周知,Mobile Safari在网页上暂停Javascript执行 您切换到不同的浏览器选项卡 切换到不同的iOS应用程序(例如,当你有一个来电的手机应用程序) 您可以订阅窗口的“页面隐藏”和“页面显示”事件来检测即将停止和重新激活Javascript。 问题是,这些事件不会在iPad Mobile Safari上切换 (1.)时触发。 在iPhone Mobile Safari上,一切都很好 ,就像上面所描述的一样。 这是微不足道的: <!DOCTYPE html> <html> <head> <script> window.addEventListener("pagehide", function(evt){ var logger = document.getElementById('log_id'); logger.innerText = logger.innerText + " pagehide fired!"; }, false); </script> </head> <body> <div id="log_id"></div> </body> </html> 它仅在进行应用切换(2.)而不是制表切换(1.)时触发iPad(iOS5和iOS6 Preview3)。 所有的iPhone都可以正常工作 有没有人能够检测到iPad浏览器即将切换的标签? 当标签变得活跃时,Javascript的重新激活可以通过心跳循环来检测,如同一主题的讨论中所述 。

如何在uiwebview iOS中处理YouTubevideo事件(开始,完成等)

目前,我正在使用新的iframe API在YouTube上的uiwebview中embeddedYouTubevideo,并且能够在没有用户交互的情况下自动播放。 在iframe API中,描述了如何使用onstatechange事件,但在我的应用程序中它似乎并不工作,不幸的是我看不到在uiwebview中的任何debugging。 我只是想能够检测到video结束时,你有什么build议吗? 有没有人得到它的工作?

我如何确定哪个UIControlEventstypes导致了一个UIEvent?

我想要做的是设置一堆UIControl对象,通过相同的处理程序发送所有事件。 该处理程序需要根据触发的UIControlEventstypes确定适当的操作。 – (void)handleEventFromControl:(id)sender withEvent:(UIEvent *)event { UIControl *control = sender; NSIndexPath *indexPath = [controlIndexPaths objectForKey:control]; UIControlEvents controlEventType = event.type; //PROBLEM HERE BOOL fire = NO; NSNumber *eventCheck = [registeredEventsByToolkitIndex objectAtIndex:indexPath.toolkit]; fire = ([eventCheck integerValue] & controlEventType); if(!fire) { eventCheck = [registeredEventsByControlIndex objectAtIndex:indexPath.control]; fire = ([eventCheck integerValue] & controlEventType); } if(!fire) { eventCheck = [registeredEventsByIndexPath […]

点击两次后,无法在iOS上inputhtmlinput字段

我在iOS上遇到一个问题,我已经提出了一个小提琴: http://jsfiddle.net/Hk56Q/ 如果为任何触摸事件(touchstart / touchmove / touchend)添加了事件侦听器,如下所示: function onTouch( e ){}; document.addEventListener( 'touchstart', onTouch, false ); 导致input字段在iOS上具有以下行为: 第一次触摸:input获得焦点,用户可以正确input 随后的触摸(重点放在已经存在的字段):打字不再工作 在iPad和iPhone(模拟器和实际设备)上,我正在iOS 5,5.1和6上体验和testing此问题。 唯一的修复似乎是删除事件监听器来恢复input字段的正确行为(或实际上从不添加监听器): document.removeEventListener( 'touchstart', onTouch); 我还注意到,如果页面上有多个iframe,并且其中一个将侦听器添加到其文档,则会打破其他iframe的input字段。 小提琴在我的Android手机上正确行事。 任何想法为什么会发生? 或者如何让触摸事件的全局自定义事件处理程序,而不会打破iOS上的input?

UIView隐藏的属性…有更多的呢?

来自ActionScript,我会设置Sprite为可见= false,以防止他们被计算在布局等事情,并确保他们不会响应事件。 在iOS开发中,我继续这样做 – 如果不需要UIView,我可以将其alpha设置为零,然后设置hidden = true。 我想知道是否浪费了我的时间,或者是否有益于此。 在我目前的项目中,我使用的是UIImageViews,它不会响应事件。 是隐藏的真正好的做法,或者只是额外的开销?

我怎样才能检查浏览器上的真正的触摸支持

今天(或最近)Chrome Beta版本已经更新到了17版本,并且在我的网页应用程序中我注意到了一些funkiness。 我注意到这是因为一个类被添加到body元素,通常只有在有触摸事件支持的情况下才会被放到那里,我这样检查: try { document.createEvent("TouchEvent"); _device.touch = true; } catch (e) { _device.touch = false; } 当然,我可以在Chrome 17上创build和触发触摸事件。首先,我的想法是,我可以检查触摸,看看鼠标单击失败,因此,有一个鼠标,但MouseEvents也触发。 如果没有用户代理嗅探,我还能如何检查它是一个真实的,可触摸的设备,而不仅仅是支持触摸事件的浏览器。

iOS – 未收到UIEventTypeRemoteControl事件

我有这个在AppDelegate(didFinishLaunching): [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 我试图在相关的视图控制器中处理这些事件,但是这是有缺陷的(一些视图控制器会得到事件,而其他视图控制器不会,即使他们是第一响应者)。 我试过UIApplication的子类。 这没有用。 现在我正在尝试子类UIWindow并执行此操作(请参阅注释): – (void)sendEvent:(UIEvent *)event { if (event.type == UIEventTypeRemoteControl) { NSLog(@"I wish this happened"); //this never happens } else { NSLog(@"some other event"); //this does happen on any other interaction [super sendEvent:event]; } } – (void) remoteControlReceivedWithEvent: (UIEvent *) receivedEvent { if (receivedEvent.type == UIEventTypeRemoteControl) { NSLog(@"got remote […]