在摇...... iOS

时间:2011-06-16 02:37:29

标签: iphone ios xcode shake first-responder

所以我有一个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。

3 个答案:

答案 0 :(得分:4)

您是否认为该观点是第一响应者?即[yourView becomeFirstResponder];(可能来自某些viewDidAppear:方法)。 您可能想要在摇动设备时检查它是否真的是第一个响应者。

答案 1 :(得分:2)

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

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    [self becomeFirstResponder];
    NSLog(@"self is first responder %i",[self isFirstResponder]);
}

答案 2 :(得分:1)

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

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

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

我的猜测是,其中一个NSLog会给你答案,因为你的其余代码似乎没问题。