1

这就是问题所在:当 MessageComposeViewController 被解除时,我的 textView 不会成为第一响应者并且键盘也不会出现。为什么?我把[textView becomeFirstResponder]代码放在viewWillAppear. 我能怎么做??

4

6 回答 6

5

我后来通过这一行调用了 becomeFirstResponder:

[self.searchBar performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.1f];

它对我有用。希望这有帮助。

估计是动画的原因。

于 2012-08-02T06:58:50.723 回答
1

根据Apple 官方文档中的注释:

在将对象分配为第一响应者之前,请确保您的应用已建立其对象图。例如,您通常在 viewDidAppear: 方法的覆盖中调用 becomeFirstResponder 方法。如果您尝试在 viewWillAppear: 中分配第一响应者,则您的对象图尚未建立,因此 becomeFirstResponder 方法返回 NO。

你应该调用[textView becomeFirstResponder]inviewDidAppear:而不是viewWillAppear:.

似乎您找到的解决方案[self dismissModalViewControllerAnimated:NO]是使用注释中的相同规则。

于 2015-12-21T11:05:37.383 回答
0

您的问题不是特别清楚,但是您假设viewWillAppear在模态视图控制器(我假设您称为MessageComposeViewController)被解除时调用它。在所有情况下都可能不是这种情况(例如,如果您的视图在 a 内UINavigationController

有很多方法可以处理这个问题,但也许最简单的方法是向您的MessageComposeViewController传递对原始视图控制器的引用并调用一个方法来使您UITextField成为第一响应者。

于 2011-11-25T11:53:12.323 回答
0

我或多或少有同样的问题,它与 segue 的动画有关,它看起来像在不使用 resignFirstResponder 的情况下做一个 segue o 关闭一个视图打破与视图的关系,我只是修改 segue 以像这样以编程方式进行:

  - (IBAction)back:(id)sender {

     [textView resignFirstResponder];
     [self performSegueWithIdentifier:@"returnScreen" sender:self];
  }

然后在 viewWillAppear 我做了下一个:

 -(void)viewWillAppear:(BOOL)animated{
     [super viewWillAppear:animated];
     [textView becomeFirstResponder];

  ....

  }
于 2012-11-09T12:11:53.967 回答
0

迅速

let when = dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC)))
    dispatch_after(when, dispatch_get_main_queue()) {
        self.searchBar.becomeFirstResponder()
    }
于 2016-07-20T08:56:21.030 回答
-1

我找到了解决办法!!!!!!!!!所以,在messageComposeViewController:didFinishWithResult我们调用的委托方法中[self dismissModalViewControllerAnimated:YES],可是错了!此方法应收到 NO,而不是 YES!然后回忆一下[textView becomeFirstResponder]方法!我不知道为什么,但是通过这种方式,该应用程序可以完美运行!不过谢谢大家!:)

于 2011-11-25T14:26:47.567 回答