从单独的班级辞职第一响应者

时间:2011-06-18 04:34:39

标签: objective-c ios cocoa-touch first-responder

我有一个类,它使键盘工具栏上有“Next”,“Previous”和“Done”按钮。这个类有没有办法随时了解(或找出)屏幕上的对象?

例如,它可以看到当前视图是什么以及它上面的文本字段是什么,然后能够让第一个响应者辞职吗?

4 个答案:

答案 0 :(得分:1)

如果您特别想要在不知道哪个视图是第一响应者的情况下辞职第一响应者,您可以将resignFirstResponder发送到“nil”,如下所示:

[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];

虽然我现在无法在文档中找到,但这是记录在案的行为。

答案 1 :(得分:0)

是的,只要textField变为活动状态,就会调用下面提供的方法。我想你正在寻找

- (BOOL) textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return 1;
}

- (void) textFieldDidBeginEditing:(UITextField *)textField
{
[textField resignFirstResponder];
}

- (void) textFieldDidEndEditing:(UITextField *)textField
{
[textField resignFirstResponder];
}

如果您要在视图中查找特定的textField,则应为其指定标记:

textField.tag =1 // for textField 1
textField.tag =2 // for textField 2

// You may check for these tags and then resign specific ones. 

答案 2 :(得分:0)

  

这门课有没有办法知道   (或找出)对象是什么   当时的屏幕?

找到momma视图,你可以像这样遍历屏幕上的所有对象(因为它们也将是UIViews)。请注意,您可能需要添加递归:

for (UIView *view in mommaView.subviews) {
    do something to the view
}

答案 3 :(得分:0)

你可以从Window类开始,然后从那里开始,询问[查看响应:@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, @"");
}