这就是问题:当MessageComposeViewController被解除时,我的textView不会成为第一个响应者,键盘也不会出现。为什么?我将[textView becomeFirstResponder]
代码放在viewWillAppear
中。我该怎么办?
答案 0 :(得分:5)
我后来通过这一行调用了becomeFirstResponder:
[self.searchBar performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.1f];
它对我有用。希望这有帮助。
我猜这是动画的原因。
答案 1 :(得分:1)
根据official Apple documentation的说明:
在将对象指定为第一响应者之前,请确保您的应用已建立其对象图。例如,您通常在viewDidAppear:方法的覆盖中调用becomeFirstResponder方法。如果您尝试在viewWillAppear:中分配第一个响应者,则您的对象图尚未建立,因此becomeFirstResponder方法返回NO。
您应该在eid = event.id;
$.ajax({
type: 'POST',
url: 'lookup_event.php',
data: eid,
success: function (sessions) {
var sessions = JSON.parse(sessions);
$('#eventTitle').val(sessions["title"];
$('#eventDescription').val(sessions["description"];
}
});
而不是[textView becomeFirstResponder]
中致电viewDidAppear:
。
似乎您在viewWillAppear:
找到的解决方案正在使用说明中的相同规则。
答案 2 :(得分:0)
您的问题并不是特别清楚,但是您假设当模态视图控制器(我假设您已调用 MessageComposeViewController )被取消时调用viewWillAppear
。在所有情况下情况可能并非如此(例如,如果您的观点位于UINavigationController
内)
有许多方法可以解决这个问题,但也许最简单的方法是将 MessageComposeViewController 传递给原始视图控制器并调用方法来制作UITextField
第一响应者。
答案 3 :(得分: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];
....
}
答案 4 :(得分:0)
在swift中
let when = dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC)))
dispatch_after(when, dispatch_get_main_queue()) {
self.searchBar.becomeFirstResponder()
}
答案 5 :(得分:-1)
我找到了解决方案!!!!!!!!
因此,在messageComposeViewController:didFinishWithResult
委托方法中,我们称之为[self dismissModalViewControllerAnimated:YES]
,但这是错误的!这个方法应该收到NO,而不是YES!然后回想一下[textView becomeFirstResponder]
方法!我不知道为什么,但以这种方式应用程序完美!
谢谢大家! :)