我有一堂课,它制作了一个键盘工具栏,上面有“下一个”、“上一个”和“完成”按钮。这个类有没有办法随时知道(或找出)屏幕上的对象?
例如,它能否看到当前视图是什么以及上面的文本字段是什么,然后能够让第一响应者辞职?
我有一堂课,它制作了一个键盘工具栏,上面有“下一个”、“上一个”和“完成”按钮。这个类有没有办法随时知道(或找出)屏幕上的对象?
例如,它能否看到当前视图是什么以及上面的文本字段是什么,然后能够让第一响应者辞职?
如果您特别想辞职第一响应者而不需要知道哪个视图是第一响应者,您可以将 resignFirstResponder 发送到“nil”,如下所示:
[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
这是记录在案的行为,尽管我现在无法在文档中找到。
是的,只要 textField 变为 Active,就会调用下面提供的方法。我想你正在寻找
- (BOOL) textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return 1;
}
或者
- (void) textFieldDidBeginEditing:(UITextField *)textField
{
[textField resignFirstResponder];
}
- (void) textFieldDidEndEditing:(UITextField *)textField
{
[textField resignFirstResponder];
}
如果您正在视图中寻找特定的文本字段,则应为它们分配标签:
textField.tag =1 // for textField 1
textField.tag =2 // for textField 2
// You may check for these tags and then resign specific ones.
这个类有没有办法知道(或找出)当时屏幕上的对象是什么?
找到 momma 视图,您可以像这样遍历屏幕上的所有对象(因为它们也将是 UIView)。请注意,您可能需要添加递归:
for (UIView *view in mommaView.subviews) {
do something to the view
}
您可以从 Window 类开始,然后从那里开始,询问 [view respondsTo:@selector(isFirstResponder) && [view isFirstResponder] 。我使用的一些调试代码可能会作为模板派上用场,也可以在调试时派上用场:
+ (void) dumpWindowFrom:(NSString *) fromText {
[self dumpViews:[[UIApplication sharedApplication] keyWindow] from:fromText];
}
void dumpViewsRecursive(UIView* view, NSString *text, NSString *indent)
{
Class cl = [view class];
NSString *classDescription = [cl description];
// while ([cl superclass]) //restore to print superclass list
// {
// cl = [cl superclass];
// classDescription = [classDescription stringByAppendingFormat:@":%@", [cl description]];
// }
if ([text compare:@""] == NSOrderedSame)
NSLog(@"%d: %@ %@ %@", (int)view, classDescription, NSStringFromCGRect(view.frame), view.hidden ? @"Inv" : @"Vis");
else
NSLog(@"%d: %@ %@ %@ %@", (int)view, text, classDescription, NSStringFromCGRect(view.frame), view.hidden ? @"Inv" : @"Vis");
for (NSUInteger i = 0; i < [view.subviews count]; i++)
{
UIView *subView = [view.subviews objectAtIndex:i];
NSString *newIndent = [[NSString alloc] initWithFormat:@" %@", indent];
NSString *msg = [[NSString alloc] initWithFormat:@"%@%d:", newIndent, i];
dumpViewsRecursive (subView, msg, newIndent);
[msg release];
[newIndent release];
}
}
+ (void) dumpViews: (UIView *) view {
dumpViewsRecursive (( (!view) ? [[UIApplication sharedApplication] keyWindow] : view), @"" ,@"");
}
+ (void) dumpViews: (UIView *) view from:(NSString *) fromText{
dumpViewsRecursive ((!view) ? [[UIApplication sharedApplication] keyWindow] : view, fromText, @"");
}