gpt4 book ai didi

iphone - 移动到另一个 View Controller 时,UISearchBar 不会在 resignFirstResponder 上隐藏键盘

转载 作者:可可西里 更新时间:2023-11-01 17:02:04 25 4
gpt4 key购买 nike

我有一个正常运行的 UISearchBar - 如果我点击“搜索”或“取消”,键盘就会消失。

但是,当我在我的导航堆栈上推送一个新的 View Controller 时,如果键盘打开,它不会关闭。它保留在旧 View Controller 中,如果我导航回它,键盘仍会显示。

我很困惑,因为我的 searchBarShouldEndEditing 方法按预期被调用,而我确实 [activeSearchBar resignFirstResponder]。这适用于“搜索”或“取消”,但不适用于由 View 消失触发的情况。

我的委托(delegate)代码:

#pragma mark Search bar delegate methods__________________________

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)activeSearchBar
{
NSLog(@"searchBarShouldBeginEditing");
[activeSearchBar setShowsCancelButton:TRUE animated:YES];

if (!showSearchType)
return TRUE;

if([UIView respondsToSelector:@selector(animateWithDuration:animations:)]) {
// iOS 4.0 and later
[UIView animateWithDuration:0.3 animations:^ {
searchTypeView.frame = CGRectMake(0, 44, 320, 69);
searchTypeView.bounds = CGRectMake(0, 0, 320, 69);
grayBg.alpha = 0.6;
}];
} else {
// Before iOS 4.0
searchTypeView.frame = CGRectMake(0, 44, 320, 69);
searchTypeView.bounds = CGRectMake(0, 0, 320, 69);
grayBg.alpha = 0.6;
}

self.frame = CGRectMake(0, 0, 320, 113);

[self bringSubviewToFront:searchTypeView];
[self bringSubviewToFront:activeSearchBar];

return TRUE;
}


- (BOOL)searchBarShouldEndEditing:(UISearchBar *)activeSearchBar
{
NSLog(@"searchBarShouldEndEditing");

if ([activeSearchBar isFirstResponder]) {
NSLog(@"activeSearchBar isFirstResponder");
}
[activeSearchBar resignFirstResponder];

[activeSearchBar setShowsCancelButton:FALSE animated:YES];

if (!showSearchType)
return TRUE;

if([UIView respondsToSelector:@selector(animateWithDuration:animations:)]) {
// iOS 4.0 and later
[UIView animateWithDuration:0.3 animations:^ {
searchTypeView.frame = CGRectMake(0, 9, 320, 69);
searchTypeView.bounds = CGRectMake(0, 0, 320, 0);
grayBg.alpha = 0;
}];
} else {
// Before iOS 4.0
searchTypeView.frame = CGRectMake(0, 9, 320, 69);
searchTypeView.bounds = CGRectMake(0, 0, 320, 0);
grayBg.alpha = 0;
}

self.frame = CGRectMake(0, 0, 320, 44);

return TRUE;
}

- (void)searchBarTextDidEndEditing:(UISearchBar *)activeSearchBar {
NSLog(@"searchBarTextDidEndEditing");

if ([activeSearchBar isFirstResponder]) {
NSLog(@"activeSearchBar isFirstResponder");
}

[activeSearchBar resignFirstResponder];

}

- (void)searchBarCancelButtonClicked:(UISearchBar *)activeSearchBar
{
NSLog(@"searchBarCancelButtonClicked");

[activeSearchBar resignFirstResponder];
}

- (void)searchBarSearchButtonClicked:(UISearchBar *)activeSearchBar
{
NSLog(@"searchBarSearchButtonClicked");

self.query = searchBar.text;

[activeSearchBar resignFirstResponder];

[searchView startSearch];
}

这个输出:

2011-12-07 20:00:33.061 MyApp[55725:307] searchBarShouldEndEditing
2011-12-07 20:00:33.063 MyApp[55725:307] activeSearchBar isFirstResponder
2011-12-07 20:00:33.066 MyApp[55725:307] searchBarTextDidEndEditing

感谢任何想法!

最佳答案

您还可以:在您的 .h 文件中声明 searchBar 变量,创建属性等...然后在您的按钮点击事件方法上,推送另一个 View ,写第一行:

[yourSearchBar resignFirstResponder]; 

关于iphone - 移动到另一个 View Controller 时,UISearchBar 不会在 resignFirstResponder 上隐藏键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8424848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com