-1

这是设置:

SNController是一个NSObject,它有内部:

  1. 界面视图
  2. UITextField
  3. UISegmentedControl
  4. UIL标签
  5. 用户界面按钮

该视图与ViewController中的视图相同。

当时可以看到一个。当UITextField可见(alpha = 1.0)时,所有其他的都是不可见的(alpha = 0.0)。

(1)我执行动画,我想要文本字段:

UITextField *textField;

在动画发生时成为第一响应者:

[textField becomeFirstResponder];

[UIView animateWithDuration: ...];

不幸的是,它不起作用。

我已经记录了文本字段,它显示它不能成为第一响应者,我不知道为什么......

我已经尝试了另外两种方法,但到目前为止都没有奏效:

(2) 一种从SNController与ViewController通信的复杂方式:

SNController.h/.m内部:

@property (nonatomic, copy) void(^eventCallBack)();

if (self.eventCallBack) {

    self.eventCallBack();
}

ViewController.m内部:

__weak ViewController *self_ = self;

self.restoration.controller.eventCallBack = ^(){

    [self_.restoration.controller.textField becomeFirstResponder];
};

(3) 我还从SNController内部尝试了这些方法:

[self.textField performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0];

[self.textField performSelectorOnMainThread:@selector(becomeFirstResponder) withObject:nil waitUntilDone:YES];

它只是不会放弃,无论如何它都不会成为第一响应者。

有任何想法吗?

4

1 回答 1

2

我意识到有一个错误。SNController 内部没有 UITextField,而是一个名为 SNTextField 的 UIView 子类。

我在初始化 UITextField 的地方实现了这个方法:

- (void)activateKeyboard
{
    [self.textField becomeFirstResponder];
}

它奏效了!

于 2014-12-15T18:46:57.310 回答