所以我有一个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。
答案 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会给你答案,因为你的其余代码似乎没问题。