iOS-UITextView成为第一响应者
这就是问题所在:当MessageComposeViewController被解除时,我的文本视图不会成为第一响应者,键盘也不会出现。为什么?我将iOS-UITextView成为第一响应者,ios,uitextview,becomefirstresponder,Ios,Uitextview,Becomefirstresponder,这就是问题所在:当MessageComposeViewController被解除时,我的文本视图不会成为第一响应者,键盘也不会出现。为什么?我将[textView becomeFirstResponder]代码放在视图中将出现。我怎么办?您的问题不是特别清楚,但是您假设当模态视图控制器(我假设您称为MessageComposeView控件)被忽略时,将出现viewwillexpress。并非所有情况下都是如此(例如,如果您的视图位于UINavigationController内) 有多种方法可以
[textView becomeFirstResponder]
代码放在视图中将出现。我怎么办?您的问题不是特别清楚,但是您假设当模态视图控制器(我假设您称为MessageComposeView控件)被忽略时,将出现viewwillexpress
。并非所有情况下都是如此(例如,如果您的视图位于UINavigationController
内)
有多种方法可以处理此问题,但最简单的方法可能是将MessageComposeViewController的引用传递给原始视图控制器,并调用一种方法使您的UITextField
成为第一响应者。您的问题不是特别清楚,但是您已经假设当模式视图控制器(我假设您称之为MessageComposeViewController)被解除时,视图将出现
被调用。并非所有情况下都是如此(例如,如果您的视图位于UINavigationController
内)
有多种方法可以处理此问题,但最简单的方法可能是向MessageComposeViewController传递对原始视图控制器的引用,并调用一种方法,使您的UITextField
成为第一响应者。我找到了解决方案!!!!!!!!
因此,在消息composeviewcontroller:didFinishWithResult
委托方法中,我们调用[self dismissModalViewControllerAnimated:YES]
,但它是错误的!此方法应接收“否”,而不是“是”!然后调用[textView becomeFirstResponder]
方法!我不知道为什么,但通过这种方式,该应用程序工作得非常完美!
不过,谢谢大家!:) 我找到了解决办法!!!!!!!!
因此,在消息composeviewcontroller:didFinishWithResult
委托方法中,我们调用[self dismissModalViewControllerAnimated:YES]
,但它是错误的!此方法应接收“否”,而不是“是”!然后调用[textView becomeFirstResponder]
方法!我不知道为什么,但通过这种方式,该应用程序工作得非常完美!
不过,谢谢大家!:) 我后来打电话给becomeFirstResponder:
[self.searchBar performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.1f];
这对我有用。希望这有帮助
我想这是动画的原因。我后来打电话给becomeFirstResponder,通过这句话:
[self.searchBar performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.1f];
这对我有用。希望这有帮助
我想这是动画的原因。我或多或少也有同样的问题,它与segue的动画有关,它看起来像是在不使用resignFirstResponder的情况下执行segue o关闭视图打破与视图的关系,我只是修改segue以编程方式执行,如下所示:
- (IBAction)back:(id)sender {
[textView resignFirstResponder];
[self performSegueWithIdentifier:@"returnScreen" sender:self];
}
然后,在视图中将显示我执行的下一个操作:
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[textView becomeFirstResponder];
....
}
我或多或少也有同样的问题,它与segue的动画有关,它看起来像是在不使用resignFirstResponder的情况下执行segue o关闭视图打破与视图的关系,我只是修改segue以编程方式执行它,如下所示:
- (IBAction)back:(id)sender {
[textView resignFirstResponder];
[self performSegueWithIdentifier:@"returnScreen" sender:self];
}
然后,在视图中将显示我执行的下一个操作:
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[textView becomeFirstResponder];
....
}
根据政府的说明:
在将对象指定为第一响应者之前,请确保应用程序已建立其对象图。例如,您通常在viewdide:方法的重写中调用becomeFirstResponder方法。如果尝试在ViewWillDisplay:中指定第一个响应程序,则对象图尚未建立,因此becomeFirstResponder方法返回NO
您应该在视图中调用[textView becomeFirstResponder]
,而不是视图将出现:
似乎您通过[self dismissModalViewControllerAnimated:NO]
找到的解决方案正在使用注释中的相同规则。根据以下注释:
在将对象指定为第一响应者之前,请确保应用程序已建立其对象图。例如,您通常在viewdide:方法的重写中调用becomeFirstResponder方法。如果您试图在ViewWillExpression中分配第一个响应程序,则对象图尚未建立,因此becomeFirstResponder方法返回NO
您应该在视图中调用[textView becomeFirstResponder]
,而不是视图将出现:
似乎您通过[self dismissModalViewControllerAnimated:NO]
找到的解决方案使用的是相同的注释规则。在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()
}
迅速地
let when = dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC)))
dispatch_after(when, dispatch_get_main_queue()) {
self.searchBar.becomeFirstResponder()
}
两个标准问题:视图是否会在消息composeviewcontroller被解除后出现
被调用?textView不是空的吗?@MichaelDautermann textView不是空的,我确定,但是我如何知道在消息控制器被解除后是否调用ViewWillDisplay?设置一个断点并查看它是否命中。或者添加NSLog(@“foo”)
(但请参见下面的答案)@jon nslog打印正确的值一对标准问题:视图是否会在消息composeviewcontroller被解除后出现
被调用?textView不是空的吗?@MichaelDautermann textView不是空的,我确定,但是我如何知道在消息控制器被解除后是否调用ViewWillDisplay?设置一个断点并查看它是否命中。或者添加NSLog(@“foo”)
(但请参见下面的答案)@jon nslog打印正确的值当模式视图被取消时,我认为视图将出现。我不明白你说的传递对MessageComposeViewController的引用是什么意思。我如何做到这一点?看看这个问题,看看视图将出现在哪里的例子,可能会调用,也可能不会调用:如果这些都不起作用,那么我可以提供一些代码示例,但最简单的方法是在MessageComposeViewController上创建一个实例变量和属性,初始化后它是giv