На дрожи... iOS
Итак, у меня есть 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 ответа
Вы сделали это мнение первым респондентом? Т.е. [yourView becomeFirstResponder];
(вероятно, от некоторых viewDidAppear:
метод). Возможно, вы захотите проверить, действительно ли это первый респондент, когда вы встряхиваете свое устройство.
Когда я переключался с определения всего графически в IB на программно встроенный в XCode, я забыл сделать представление первым респондентом вообще. Вот код, который в конечном итоге исправил это:
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[self becomeFirstResponder];
NSLog(@"self is first responder %i",[self isFirstResponder]);
}
Первое, что я хотел бы спросить, должно ли это быть определено как IBAction. Если вы вызываете его только из кода, вы можете использовать вместо него (void) (просто выбор стиля).
Во-вторых, вы уверены, что метод на самом деле вызывается? Добавьте туда NSLog, чтобы убедиться.
В-третьих, вы уверены, что [def objectForKey:@"activeVersion"] возвращает строку? Возвращено ли значение, которое вы ожидаете? Добавьте туда NSLog, чтобы убедиться.
Я предполагаю, что один из NSLogs даст вам ответ на ваш вопрос, так как остальная часть вашего кода выглядит нормально.