【问题标题】:Ignore Tab character in UITextField... (iPad app)忽略 UITextField 中的制表符...(iPad 应用程序)
【发布时间】:2011-05-01 11:50:09
【问题描述】:

我在每个单元格中有一个带有 TextFields 的 TableView,我想要这些文本字段 忽略字符选项卡 (\t)。

当tab键被按下时,textField:shouldChangeCharactersInRange方法不会被调用

有人知道怎么做吗?我知道 iPad 中没有 Tab 键 键盘,但蓝牙和扩展坞会触发一个非常奇怪的行为。

谢谢

【问题讨论】:

    标签: iphone ipad uitableview uitextfield


    【解决方案1】:

    您是否尝试过检查您调用 shouldChangeCharactersInRange 的范围内的其他字符?这将确保它没有被正确调用(特别是 tab 键的问题)。

    更多关于 shouldChangeCharactersInRange here

    【讨论】:

    • 你好.. 是的,我有时会使用委托来检查特定值,但是当我点击 tab 键时,它没有调用的方法
    【解决方案2】:

    检查以确保 UITextField 的委托是在 IB 或代码中设置的。 检查以确保您的 .h 文件具有指定的 UITextFieldDelegate

    现在应该一切正常了。

    【讨论】:

    • 您好...代表们与其他角色一起工作,我正在使用这些角色进行其他检查
    【解决方案3】:

    这似乎是制表符 (\t) 字符的问题。此字符不像普通字符(例如 a、b、c、0、1、2、...)那样处理,因此

                  - (BOOL)textField:(UITextField *)textField 
      shouldChangeCharactersInRange:(NSRange)range 
                  replacementString:(NSString *)string;
    

    永远不会调用委托方法。

    在 e.g. 上使用选项卡的结果外部键盘或模拟器中当前活动的文本字段放弃了它的第一响应者状态和结果

    [textField nextResponder]
    

    将改为成为第一响应者。

    IMO 目前是一个错误(iOS SDK 4.3)是委托方法

    - (BOOL)textFieldShouldEndEditing:(UITextField *)textField
    

    只被调用一次(当你返回yes时),当你重新选择相同的文本字段并再次使用tab键时,该方法将不会被再次调用。

    【讨论】:

    • -[UIResponder nextResponder] 返回超级视图,而不是下一个有效的键视图,-textFieldShouldEndEditing: 仅用于验证文本字段的内容;无论如何,它可能会辞去第一响应者的职务,并且很难区分由于触摸和按键而被调用。
    【解决方案4】:

    我认为这是可能的,但很难。基本上,我会尽量确保当文本字段成为第一响应者时,没有其他视图可以成为第一响应者。然后,按 Tab 将无济于事。然后,当实际上可能成为第一个响应者的视图时,或者当文本字段辞职时,您必须反转此效果。

    【讨论】:

      【解决方案5】:

      实现这个方法:

      在你的 AppDelegate.m 中添加这个

      - (NSArray *)keyCommands {
      static NSArray *commands;
      
      static dispatch_once_t once;
      dispatch_once(&once, ^{
          UIKeyCommand *const forward = [UIKeyCommand keyCommandWithInput:@"\t" modifierFlags:0 action:@selector(ignore)];
          UIKeyCommand *const backward = [UIKeyCommand keyCommandWithInput:@"\t" modifierFlags:UIKeyModifierShift action:@selector(ignore)];
      
          commands = @[forward, backward];
      });
      
      return commands;
      }
      

      在要处理TAB键事件的 ViewController.m 或 UITextField 的子类中添加此方法

      - (void)ignore {
      
          NSLog(@"Your Action");
      } 
      

      描述于:How do you set the tab order in iOS?

      【讨论】:

        猜你喜欢
        • 2012-04-10
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        • 2012-08-04
        • 2013-05-10
        • 2016-11-11
        • 2014-01-25
        • 1970-01-01
        相关资源
        最近更新 更多