На дрожи ... iOS - PullRequest
       36

На дрожи ... iOS

1 голос
/ 16 июня 2011

Итак, у меня есть 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 ]

4 голосов
/ 16 июня 2011

Вы сделали это мнение первым респондентом?Т.е. [yourView becomeFirstResponder]; (возможно, из какого-то viewDidAppear: метода).Возможно, вы захотите проверить, действительно ли это первый респондент, когда вы трясете свое устройство.

2 голосов
/ 17 июня 2011

Когда я переключался с определения всего графически в IB на программно встроенный в XCode, я забыл сделать представление первым респондентом вообще.Вот код, который в конечном итоге исправил это:

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    [self becomeFirstResponder];
    NSLog(@"self is first responder %i",[self isFirstResponder]);
}
1 голос
/ 16 июня 2011

Первое, что я хотел бы спросить, должно ли это быть определено как IBAction.Если вы вызываете его только из кода, вы можете использовать вместо него (void) (просто выбор стиля).

Во-вторых, уверены ли вы, что метод действительно вызывается?Добавьте туда NSLog, чтобы убедиться.

В-третьих, вы уверены, что [def objectForKey: @ "activeVersion"] возвращает строку?Возвращено ли значение, которое вы ожидаете?Добавьте туда NSLog, чтобы убедиться.

Я предполагаю, что один из NSLog даст вам ответ на ваш вопрос, так как остальная часть вашего кода выглядит нормально.

...