1

所以我有一个 IBAction yesNo,我想在一个震动事件中运行它。不太清楚为什么这不起作用。已遵循所有文档。

-(BOOL)canBecomeFirstResponder
{
    return YES;
}

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event 
{
    if (event.subtype == UIEventSubtypeMotionShake)
    {
        [self yesNo];
    }
}

然后是 IBAction 本身:

- (IBAction)yesNo 
{
    int rNumber = rand() % 26;  
    NSUserDefaults *def=[NSUserDefaults standardUserDefaults];
    if ([[def objectForKey:@"activeVersion"] isEqualToString:@"0"])
    {
        switch (rNumber) {
            case 0:
                result.text  = @"Never";
                break;
            case 1:
                result.text = @"If you're lucky...";
                break;
            case 3:
                result.text = @"Think twice";
                break;
            ...
            default:
                break;
        }
    }
    else if ([[def objectForKey:@"activeVersion"] isEqualToString:@"1"])
    {
        switch (rNumber) {
            case 0:
                result.text  = @"Never1";
                break;
            case 1:
                result.text = @"If you're lucky...1";
                break;
            ...
            case 25:
                result.text = @"Very doubtful2";
                break;

            default:
                break;
        }
    }
    else if ([[def objectForKey:@"activeVersion"] isEqualToString:@"3"])
    {
        switch (rNumber) {
        case 0:
            result.text  = @"Never3";
            break;
        ...
        case 25:
            result.text = @"Very doubtful3";
            break;

        default:
            break;
    }
}   
}

基本上我所拥有的是一个幸运球类型的东西,当 iPhone 摇晃时,我需要运行 IBAction。

4

3 回答 3

4

您是否已将该视图作为第一响应者?即[yourView becomeFirstResponder];(可能来自某种viewDidAppear:方法)。当您摇动设备时,您可能想检查它是否真的是第一响应者。

于 2011-06-16T13:38:44.440 回答
2

当我从在 IB 中以图形方式定义所有内容切换到在 Xcode 中以编程方式内联时,我完全忘记了让视图成为第一响应者。这是最终修复它的代码:

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    [self becomeFirstResponder];
    NSLog(@"self is first responder %i",[self isFirstResponder]);
}
于 2011-06-16T20:22:57.630 回答
1

我要问的第一件事是这是否应该被定义为 IBAction。如果您只从代码中调用它,那么您可能需要考虑使用 (void) 代替(只是一种样式选择)。

其次,您确定该方法实际上正在被调用吗?在那里扔一个 NSLog 以确保。

第三,你确定 [def objectForKey:@"activeVersion"] 返回一个字符串吗?返回的值是否符合您的预期?在那里扔一个 NSLog 以确保。

我的猜测是,其中一个 NSLog 将为您提供问题的答案,因为您的其余代码似乎都很好。

于 2011-06-16T03:00:35.647 回答