【问题标题】:UISearchController search bar appears but not working/triggeringUISearchController 搜索栏出现但不工作/触发
【发布时间】:2020-02-18 01:43:58
【问题描述】:

在我的视图控制器中,我以编程方式添加了一个搜索栏,它的显示方式完全符合我的要求,但是当我点击它时,我无法在搜索栏上写入/键入任何内容,并且日志上没有错误。 我以同样的方式在另一个视图控制器中添加了搜索栏,它确实有效,但在特定情况下它不起作用。我正在从以前的视图控制器推动这个视图控制器,所以它在左侧有一个导航返回按钮(检查图像)它也可以工作。

在视图控制器中有一个 TableView 和一个 CollectionView 我想添加对表视图的搜索。我想知道将这两者放在同一个视图控制器中是否有任何关系。

添加搜索栏的代码

- (void)viewDidLoad {
   //other stuff on view controller
   [self setSearchView];
}

-(void)setSearchView{
    //searchController is added as a property on .h file 
    //and all the delegate are also added
    //@property (strong, nonatomic) UISearchController *searchController;

    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
    self.searchController.searchResultsUpdater= self;
    self.searchController.dimsBackgroundDuringPresentation = NO;
    self.searchController.searchBar.delegate = self;
    self.navigationController.toolbarHidden=YES;

    self.navigationItem.titleView=self.searchController.searchBar;

    self.searchController.hidesNavigationBarDuringPresentation = NO;
    self.definesPresentationContext = YES;
}

我从前一个视图控制器来到这个视图控制器,并在单击按钮时推动这个视图控制器。我正在使用 nib 文件
按钮动作

- (void)ButtonClicked {
   MYNextViewController *nextViewController = [[MYNextViewController alloc] initWithNibName:@"MYNibFileName" bundle:nil];

    // I also have a tab bar on the bottom which i am hiding for that view controller when pushing
    nextViewController .hidesBottomBarWhenPushed=YES;

    [self.navigationController pushViewController:nextViewController  animated:YES];
}

图片:

任何帮助将不胜感激。希望我说清楚了...

【问题讨论】:

  • 尝试使用 view herracy 调试,看看是否有任何东西阻止了搜索栏
  • 也许层次结构有问题,我找不到其他任何东西。我会看看..tnx
  • 你有没有尝试将[_ searchController becomeFirstResponder];转换成searchBarTextDidBeginEditing方法
  • 是的,我做到了,注意到结果是一样的......虽然 tnx

标签: ios objective-c uisearchbar


【解决方案1】:

感谢@Tj3n,我终于能够通过视图层次结构的一些变化来解决这个问题,但不确定这是否是正确的解决方案,但现在它正在工作.. 我还不得不删除这一行并添加更多代码用于其他目的

self.definesPresentationContext = YES; //removed...

that 问题的回答也很有帮助

【讨论】:

    【解决方案2】:

    我遇到了类似的问题并在这里尝试了答案,但它对我不起作用。然后偶然发现了这个帖子https://forums.developer.apple.com/thread/122972

    基本上对我来说禁用自动同步粘贴板是有效的。 (模拟器 -> 编辑 -> 自动同步粘贴板)

    【讨论】:

      【解决方案3】:

      //请使用此代码

        _searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0.0, 0.0, self.view.bounds.size.width, self.navigationController.navigationBar.bounds.size.height)];
      _searchBar.tintColor = [UIColor blueColor];
      
      //[_searchBar setImage:[UIImage imageNamed:@"cross_icon"] forSearchBarIcon:UISearchBarIconBookmark state:UIControlStateNormal];
      _searchBar.placeholder = @"Enter drug name";
      //_searchBar.showsBookmarkButton = YES;
      _searchBar.barTintColor = [UIColor clearColor];
      
      UITextField *txfSearchField = [_searchBar valueForKey:@"_searchField"];
      txfSearchField.backgroundColor = [UIColor whiteColor];
      txfSearchField.tintColor = [UIColor blackColor];
      txfSearchField.textColor = [UIColor blackColor];
      _searchBar.autoresizingMask = UIViewAutoresizingFlexibleWidth;
      _searchBar.delegate = self;
      _searchBar.showsCancelButton = NO;
      [_searchBar becomeFirstResponder];
      [self.navigationController.navigationBar addSubview:_searchBar];
      

      【讨论】:

      • 不确定你的回答与我的问题有什么关系
      【解决方案4】:

      对于你的特殊情况,使用这个。

       self.searchController.obscuresBackgroundDuringPresentation = NO;
      

      这将允许您使用相同的 tableview 与搜索结果进行交互。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-27
        • 1970-01-01
        相关资源
        最近更新 更多