1

yesNoそのため、シェイク イベントで実行したいIBAction があります。なぜこれが機能しないのかはよくわかりません。すべてのドキュメントに従いました。

-(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を投げて確認してください。

私の推測では、コードの残りの部分は問題ないように見えるので、NSLogs の 1 つが質問への回答を提供するでしょう。

于 2011-06-16T03:00:35.647 に答える