2010-05-25 60 views
0

对于那些你们谁图形工作,这里是视图层次结构的示意图:UITextField停止摇动事件?

Root View -> UINavigationController -> UITableView -> Edit View -> Problem UITextfield

基本上,当设备震动- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event;被称为我的根视图。

当用户点击“编辑”图标(笔,在屏幕的底部 - 不是传统的UINavigationBar编辑按钮),主视图添加一个子视图到自己,并使用动画在屏幕上使用自定义动画。

这个子视图包含一个UINavigationController,它包含一个UITableView。 UITableView在单元被点击时将子视图加载到自身中。第二个子视图是罪魁祸首。由于某种原因,第二个子视图中的UITextField会导致问题。

当用户点击视图时,除非UITextField处于活动状态(处于编辑模式?),否则主视图不会响应抖动。

附加信息:

我的议案事件处理程序:

- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event { 
NSLog(@"%@", [event description]); 
SystemSoundID SoundID; 
NSString *soundFile = [[NSBundle mainBundle] pathForResource:@"shake" ofType:@"aif"]; 
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:soundFile], &SoundID); 
AudioServicesPlayAlertSound(SoundID); 
[self genRandom:TRUE]; 
} 

genRandom:方法:

/* Generate random label and apply it */ 
-(void)genRandom:(BOOL)deviceWasShaken{ 
if(deviceWasShaken == TRUE){ 
    decisionText.text = [NSString stringWithFormat: (@"%@", [shakeReplies objectAtIndex:(arc4random() % [shakeReplies count])])]; 
}else{ 
    SystemSoundID SoundID; 
    NSString *soundFile = [[NSBundle mainBundle] pathForResource:@"string" ofType:@"aif"]; 
    AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:soundFile], &SoundID); 
    AudioServicesPlayAlertSound(SoundID); 
    decisionText.text = [NSString stringWithFormat: (@"%@", [pokeReplies objectAtIndex:(arc4random() % [pokeReplies count])])]; 
} 
} 

shakeRepliespokeReplies都是NSArrays的字符串。一个用于屏幕的某个部分被戳穿,另一个用于设备被震动时。该应用程序将从NSArray中随机选择一个字符串并显示在屏幕上。

一如既往,代码示例表示赞赏。 我已经添加了我自己的来帮助解释这个问题。

+0

如何在子视图中的键盘? – 2010-05-25 04:22:32

+0

不再相关,请关闭。 – Moshe 2010-06-10 17:59:47

回答

1

键盘:寻找UIKeyboardAppearanceAlert

至于抖动检测。一旦UITextField辞职第一响应者(不在焦点,键盘隐藏),你需要确保链中的另一个UIResponder成为firstResponder。举例来说,如果你有一个按钮,发送-resignFirstResponder文本字段,你需要这样做:

- (IBAction)pressButton { 
    [textField resignFirstResponder]; 
    [self becomeFirstResponder]; 
} 
+0

这完成了它的工作并首先发布。尽管答案不完整。 – Moshe 2010-06-03 18:58:10

1

尝试使用[self.view endEditing:YES];

和键盘是玻璃的使用:

[textfield setKeyboardAppearance:UIKeyboardAppearanceAlert]; 

希望这会有所帮助。 谢谢, Madhup

+0

第一种方法是我尝试的方法。没有什么在那里做,没有工作。 – Moshe 2010-06-03 18:57:08