【问题标题】:NSTextField resigning first responderNSTextField 辞职第一响应者
【发布时间】:2010-12-13 16:35:33
【问题描述】:

我正试图让我的文本字段在用户完成编辑后退出第一响应者,例如当他们按下回车键时。委托方法被调用,但我现在所拥有的不起作用,这样做的正确方法是什么?

- (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor
{
    [fieldEditor resignFirstResponder];
    return YES;
}

【问题讨论】:

    标签: objective-c cocoa interface-builder


    【解决方案1】:

    来自 -resignFirstResponder 方法的文档:

    使用 NSWindow makeFirstResponder: 方法,而不是这种方法,来制作 反对第一响应者。绝不 直接调用这个方法。

    这段代码应该可以做到:

    [myWindow makeFirstResponder:nil];
    

    【讨论】:

    • 它会导致崩溃,但我认为这是另一个问题,当我修复它时,我认为您的解决方案会起作用。谢谢。
    • 问题肯定出在其他地方。这是使 nothing 成为窗口的第一响应者的正确方法。
    • 当我调用它时,它会导致一个无限循环,其中窗口询问控件 control:textShouldEndEditing:,它调用 makeFirstResponder: ad infinitum。
    • @SG1:将您的代码发布到新问题中。您的评论中没有足够的信息来猜测。
    【解决方案2】:
    - (void)controlTextDidEndEditing:(NSNotification *)obj {
    
       [self.window makeFirstResponder:view];
    }
    

    其中“view”是您的 NSTextView 控件的父 NSView。

    【讨论】:

      【解决方案3】:

      我相信您正在寻找 NSControl 委托方法:

      - (void)controlTextDidEndEditing:(NSNotification *)notif
      

      在您的 NSTextField 委托中实现此方法(在 IB 中轻松设置)。

      然后你的请求改变响应者,比如

      [self.window selectNextKeyView:self]
      

      应该可以。

      【讨论】:

        【解决方案4】:

        我还不是 iPhone 编程方面的专家,但您需要实现的方法是“textFieldShouldReturn”,实现方式如下:

          - (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
            [theTextField resignFirstResponder];
            return YES;
        }

        【讨论】:

        • 也许我应该更清楚一点,它不适用于 iPhone 应用程序。您展示的方法是针对 UITextField 委托的,它是针对 Cocoa Touch 的。
        • 这不是在 osx sdk 中每个类都以 UI 开头属于 iOS 而不是 OSX
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-05
        • 1970-01-01
        相关资源
        最近更新 更多