gpt4 book ai didi

ios - 以编程方式激活 UISearchBar 阻止用户与其交互

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:41:10 25 4
gpt4 key购买 nike

我在导航 Controller 中有一个简单的 TableView ,其中的工具栏可见。工具栏上有一个搜索按钮, TableView 的表头 View 设置为我的UISearchBar。如果我向上滚动表格 View 然后点击搜索栏将其激活,一切都会正常进行。但是,如果我点击以编程方式激活搜索栏的搜索按钮,则与搜索栏的所有交互都将被禁用(看起来它被某些东西阻止了),并且用户无法清除搜索、取消搜索甚至四处导航文本字段中的文本。

-(void)viewDidLoad
{
[self setupSearchBar];
}

-(void)setupSearchBar
{
self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 44.0)];
self.searchBar.autocorrectionType = UITextAutocorrectionTypeDefault;
self.searchBar.delegate = self;
self.tableView.tableHeaderView = self.searchBar;

self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar
contentsController:self];
self.searchController.delegate = self;
self.searchController.searchResultsDataSource = self;
self.searchController.searchResultsDelegate = self;

[self.searchController.searchResultsTableView registerNib:[UINib nibWithNibName:@"ItemCell" bundle:nil]
forCellReuseIdentifier:CellIdentifier];

for (UIView* subview in self.searchBar.subviews) {
if ([subview conformsToProtocol:@protocol(UITextInputTraits)]) {
[(UITextField*)subview setKeyboardAppearance:UIKeyboardAppearanceAlert];
[(UITextField*)subview setReturnKeyType:UIReturnKeyDone];
}
}

self.tableView.contentOffset = CGPointMake(0, self.searchBar.frame.size.height);
}

-(IBAction)search:(id)sender
{
[self.searchBar becomeFirstResponder]; // also tried [self.searchController setActive:YES animated:YES];
}

我已经使用 NSFetchedResultsController 设置了我的搜索显示 Controller ,如 this SO post. 中所述。

更新

我通过在将 UISearchBar 设置为第一响应者之前让我的 UITableView 滚动到顶部来解决这个问题。为什么这行得通?我不知道,看到成为第一响应者部分不是问题,但是如果当它成为第一响应者时搜索栏不在屏幕上,取消和清除按钮将不起作用。这是我的代码。

-(void)search:(id)sender
{
[self.tableView setContentOffset:CGPointMake(0, -self.tableView.contentInset.top) animated:NO];
double delayInSeconds = 0.1;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[self.searchController setActive:YES animated:YES];
[self.searchController.searchBar becomeFirstResponder];
});
}

如果有人对这为何有效有任何见解,我会洗耳恭听。

最佳答案

尝试执行 hit test , 看看您的视线是否被遮挡。

[self.view hitTest:[self.view convertPoint:searchBar.center fromView:searchBar]];

关于ios - 以编程方式激活 UISearchBar 阻止用户与其交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19688500/

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