【问题标题】:textFieldDidBeginEditing: not getting calledtextFieldDidBeginEditing:没有被调用
【发布时间】:2014-06-29 22:30:38
【问题描述】:

我从this SO question 得到了下面的代码。当我开始编辑时,我试图向上滑动文本字段(因为否则它们会被 iPhone 键盘覆盖)。但是,日志语句显示 textFieldDidBeginEditing 方法没有被调用。

我在 UIViewController 的两个不同子类中有以下代码。例如,在其中一个中,我有一个从情节提要连接到 UIViewController 的文本字段,如下所示

@property (strong, nonatomic) IBOutlet UITextField *mnemonicField;

我将文本字段移到视图的顶部(即未被键盘覆盖),以便我可以对其进行编辑以尝试触发日志语句,但它不起作用。否则文本字段按预期工作,即我输入的数据将保存到 coreData 等。

你能解释一下我可能做错了什么吗?

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    NSLog(@"The did begin edit method was called");
    [self animateTextField: textField up: YES];
}


- (void)textFieldDidEndEditing:(UITextField *)textField
{
    [self animateTextField: textField up: NO];
}

- (void) animateTextField: (UITextField*) textField up: (BOOL) up
{
    const int movementDistance = 180; // tweak as needed
    const float movementDuration = 0.3f; // tweak as needed

    int movement = (up ? -movementDistance : movementDistance);

    [UIView beginAnimations: @"anim" context: nil];
    [UIView setAnimationBeginsFromCurrentState: YES];
    [UIView setAnimationDuration: movementDuration];
    self.view.frame = CGRectOffset(self.view.frame, 0, movement);
    [UIView commitAnimations];
}

【问题讨论】:

  • 是否调用了其他任何委托方法或您何时设置委托?
  • @larme 我必须设置一个代表才能工作?不知道
  • textFieldDidEndEditing: 是一个委托方法。这是UITextFieldDelegate 方法,而不是UITextField 方法。
  • 对我来说,我已将我的 TextField 添加到 UIViewController,并且我已将 UIViewController 的视图作为子视图添加到我的主 VC 中。然后我需要转到我的主 VC 并包含代码 [self addChildViewController:myVC]; 以便 textField 代表开始在该 VC 中工作。很惊讶我以前没有遇到过这种情况

标签: ios objective-c


【解决方案1】:

您尚未在 ViewController 类中分配 delegateUITextField

在您的 viewcontroller.m 文件中,在 ViewDidLoad 方法中,执行以下操作:

self.mnemonicField.delegate=self; 

在您的 viewcontroller.h 文件中,执行以下操作:

@interface YourViewController : ViewController<UITextFieldDelegate>

【讨论】:

    【解决方案2】:

    您应该为自己设置文本字段委托。 将此行添加到 viewDidLoad 方法:

    self.mnemonicField.delegate = self;
    

    并记得添加这一行 &lt;UITextFieldDelegate&gt; 以符合该协议。

    您可以通过控制从所需的 UITextField 拖动到视图控制器并选择委托来在情节提要中实现相同的效果。

    【讨论】:

      【解决方案3】:

      您创建了 IBOutlet,所以只需将您的文本字段拖到 viewController 并设置委托

      然后在.h中添加以下内容

      @interface ViewController : ViewController<UITextFieldDelegate>
      

      【讨论】:

        【解决方案4】:

        在其他情况下,如果您单击任何其他按钮而不移动 Uitextfield 的焦点,则不会调用委托,因为您需要显式调用

        yourtextfield.resignFirstResponder()
        

        【讨论】:

          猜你喜欢
          • 2012-10-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-15
          • 1970-01-01
          • 1970-01-01
          • 2018-11-25
          • 2019-03-31
          相关资源
          最近更新 更多