在 UIAlertview 之后摇动不再起作用

Posted

技术标签:

【中文标题】在 UIAlertview 之后摇动不再起作用【英文标题】:Shake no longer works after a UIAlertview 【发布时间】:2013-03-11 23:13:51 【问题描述】:

我已经在 iPad 和 iPad 模拟器上对此进行了测试,并且在一次成功摇动后,motionBegan 方法永远不会被调用。以下是我的程序的一个sn-p。

- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event

  if(event.type == UIEventSubtypeMotionShake)
  
    NSLog(@"Shake event occurred.");

            UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Information" message:@"Some message here" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
            alert.tag = shakeTag;
            [alert show];

  


- (BOOL)canBecomeFirstResponder

return YES;


-(void)viewDidAppear:(BOOL)animated 
  [super viewDidAppear:NO];
  [self becomeFirstResponder];


-(void)viewWillDisappear:(BOOL)animated 
  [super viewWillDisappear:NO];


-(void)viewDidDisappear:(BOOL)animated 
  [self resignFirstResponder];
  [super viewDidDisappear:NO];

究竟是什么阻止了motionBegan方法再次发生?我希望 UIAlertView 在第一次摇动时只显示一次,并在所有后续摇动时被关闭。我有一种预感,First Responder 仍然连接到 UIAlertView,这会阻止再次调用 motionBegan 方法。

更新:在我对应的 UIView 中,有一个 UIActionSheet 被创建。在我的 UIView 中调用并实现)并且我在 UIActionSheet 显示在屏幕上的同时触发了 motionBegan 方法(在我的 UIViewController 中),存在不再能够调用motionBegan 方法的问题。

之后,UIAlertView 从任何按钮选择中消失,不再调用 motionBegan 方法,但 UIActionSheet 工作正常。 UIView 中没有 firstResponder 分配,UIViewController 中只存在“canBecomeFirstResponder”。有什么想法吗?

【问题讨论】:

我复制并粘贴了您的代码,它在 iPad 模拟器上反复运行(我取出的唯一内容是 alert.tag = shakeTag 行)。 @rdelmar 它在 iPAD 模拟器上对我不起作用。硬件摇动手势不再调用motionBegan,因为以下行只有一个输出:“NSLog(@"Shake event occurred.");"我有以下方法来处理特定的警报标签,“- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex” 好吧,我不知道为什么你的不起作用。我添加了标签和警报委托方法,它对我来说仍然可以正常工作。 @rdelmar 这是在您的视图控制器类中吗? 是的。不是你的吗? 【参考方案1】:

    由于该代码在您的 viewController 中,请删除所有与响应程序链相关的内容。你实际上不需要它。它是自动为您制作的。更准确地说,您可以删除:

    - (BOOL)canBecomeFirstResponder // remove all that method
    
    return YES;
    
    
      [self becomeFirstResponder]; // remove this line
    
    ...
      [self resignFirstResponder]; // remove this line
    ...
    

    并删除这个以及所有那个方法

    -(void)viewWillDisappear:(BOOL)animated 
      [super viewWillDisappear:animated];
    
    

    在 motionEnd 中调用您的 alertView 内容,而不是在 motionBegan 中。可能会更好。

【讨论】:

与响应者链相关的东西到底是什么?

以上是关于在 UIAlertview 之后摇动不再起作用的主要内容,如果未能解决你的问题,请参考以下文章

UIPopover 防止摇晃撤消

在最近的更新之后,使用 shinyjs 重置 event_data 似乎不再起作用

jGroups简单示例不再起作用

摇动手势在 iPhone 4 中不起作用,不知道为啥...?

摇动手势不起作用

键盘偏移在 SwiftUI 2 中不再起作用