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

2024-01-03

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

-(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就像描述的那样这个帖子。 https://stackoverflow.com/a/4481896/1827743

UPDATE

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

-(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 https://developer.apple.com/library/ios/documentation/uikit/reference/uiview_class/UIView/UIView.html,看看您的视线是否被遮挡。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以编程方式激活 UISearchBar 会阻止用户与其交互 的相关文章

  • 无法构建 Saurik 的 ldid 实用程序

    当我执行此命令 make sh 时 我遇到这些错误 构建用于越狱调整开发的 ldid 实用程序 Bilals Mac ldid billy make sh g arch i386 arch x86 64 arch ppc arch armv
  • XMPPFramework - 如何创建多用户聊天室?

    我如何使用XMPPFramework在iPhone中实现GroupChat 我尝试了以下代码 但房间没有创建 我如何知道房间是否创建 XMPPRoomDelegate没有被调用 当Stream断开连接时 调用handleDidLeaveRo
  • 使用 iOS 8 自定义键盘发送图像?

    我一直在为 iOS 8 开发自定义键盘 但在尝试使用键盘发送图像时偶然发现了一个问题 我做了一些研究 似乎没有一种简单的方法可以做到这一点UITextDocumentProxy因为只有NSStrings被允许 我是否忽略了使用自定义键盘发送
  • 将永久字符添加到 UITextField

    有没有办法将字母永久添加到 UITextField 中 用户无法删除它 我想添加一个字符 用户无法删除它 但他们仍然可以在之后添加字母 Cheers 附注这是适用于 iOS 的 A UITextField有一个名为 应该更改范围内的字符 的
  • Swift Generics 在使用继承时不会实例化泛型

    我有课Alpha and Berry class Alpha class Berry Alpha 我有一个使用继承及其泛型的函数 func myFunc
  • 在横向中自动调整 UITableCells 内容的大小

    在 UITableView 中 我通过 UILabels 将内容添加到单元格中 定义最佳尺寸 与单元格宽度允许的一样大 我注意到只有tableView contentSize width是可靠的 因为cell contentView bou
  • 带操作按钮的颤动本地通知

    我在我的 flutter 项目中尝试了 flutter 本地通知插件 它在简单通知上工作正常 但我需要带有操作按钮的通知功能 请帮助我或建议我实现此功能 不幸的是 flutter local notifications 插件尚不支持操作按钮
  • 当地图视图只是屏幕的一部分时,如何在 iOS 模拟器中进行捏合?

    我在 iPad 上有一个视图 我正在添加MKMapView也就是说 全屏高度的一半 然而 当我尝试在 iOS 模拟器上进行捏合时 它不起作用 因为 to nubs 填充了模拟器上的整个 iPad 视图 And so with the map
  • 是否可以使用 Firebase 安排推送通知? [复制]

    这个问题在这里已经有答案了 我已经阅读了我能找到的所有文档 但仍然不知道这是否可行 如果我是用户 我可以安排特定时间的推送通知吗 Example 1 我是用户并打开应用程序 2 我允许通知并转到 pickerView 或其他任何内容 并设置
  • 在 Xcode 5 中重命名 iOS 项目[重复]

    这个问题在这里已经有答案了 我需要重命名一个 iOS 项目 有没有办法在不开始一个全新项目的情况下做到这一点 我发现的所有其他信息都与 Xcode 4 或旧版本相关 这些方法似乎使项目崩溃 我在尝试任何名称更改之前创建了一个快照 在 Xco
  • 在 Swift 中从 UIScrollView 创建 PDF 文件

    我想从 UIScrollView 的内容创建一个 PDF 文件 func createPdfFromView aView UIView saveToDocumentsWithFileName fileName String let pdfD
  • 更改组织以使用 Xcode 9 在 iTunes Connect 上上传二进制文件

    我在 Xcode9 上配置了多个团队 当我尝试将二进制文件上传到 Xcode 9 上的 iTunes Connect 时 没有更改团队的选项 并且出现以下错误 ERROR ITMS 4088 来自苹果开发者论坛的解决方案 1 正常存档2 窗
  • 如何使用AudioKit保存音频文件?

    我有音频文件 我给它做了一些效果 let pitchshifter AKPitchShifter self audioPlayer pitchshifter shift 10 AudioKit output pitchshifter 如果我
  • UIButton的高亮状态由什么控制事件开始和结束

    我正在创建类似钢琴的视图UIButton作为钢琴键 什么UIControlEvents当按钮获得和失去突出显示状态时 我应该监听以获得回调吗 我试图创建子类UIButton并添加属性观察者highlighted并且运行良好 然而 有时我需要
  • 将 Firebase 云消息传递与 Windows 应用程序结合使用

    我在 Android 和 iOS 应用程序中使用 Firebase Cloud Messaging 但是我还有此应用程序的 Windows Mac OS 版本 我想保留相同的逻辑 我知道 Firebase Cloud Messaging 可
  • 在 Objective C 的类方法中引用类本身

    我希望我没有跳过 ObjC 手册中的这一部分 但是是否可以从类的一个类方法中引用该类 就像在 PHP 中一样 您将使用 this 来引用当前实例 而 self 引用实例的类 this 的 ObjC 等价物将是 self 那么 PHP 的 s
  • 推送动画,没有阴影和停电

    我有一个简单的iOS NavigationController基于应用程序 二UICollectionViews 相继 如果元素打开 第一个合集 被点击时 第二集 将被打开 非常简单 重要的提示 Both UICollectionViews
  • 哪些 Flutter 插件或功能可以利用外部 iOS/Android 显示器来显示与主显示器不同的内容

    我正在构建一个跨平台应用程序 需要在外部显示器上显示不同的视图 通常通过连接到 LCD 投影仪的 HDMI 适配器电缆连接 Flutter 是否能够在内置的外部显示器上显示不同的屏幕 在现有的 Flutter 插件中还是使用现有的 Flut
  • 如何阻止 UITableView moveRowAt IndexPath 在重新排序时留下空白行

    我遇到一个问题 在重新排序 UITableViewCells 时 tableView 不随单元格滚动 仅出现一个空白行 任何后续滚动都会出现数组越界错误 堆栈跟踪中没有我的任何代码 这是该问题的快速视频 http www screencas
  • iOS - UITableViewCell 使文本加粗

    我有一个字符串 NSString userInfo James Johnson james 我想做的就是大胆James Johnson并保留 james正常字体 所以我尝试过的是使用NSAttributedString但为了完成这个过程 我

随机推荐

  • Celery 任务在多个队列中注册

    我在 Django 1 9 中使用 celery 和 RabbitMQ 服务器 我有四个不同的队列 我正在这四个队列之一中注册一个任务 问题是我的所有任务都注册在所有四个队列中 就像我有一个名为add并有四个队列 A B C 和 D 理想情
  • 根据C++模板类型调用不同的C函数

    我的问题如下 我有一个 C 库 其中包含每个函数的多个版本 具体取决于它们所使用的数据类型 例如 void add double a double b double c and void sadd float a float b float
  • 如何设置 QComboBox 宽度以适合最大的项目?

    我有一个QComboBox我充满了QString using comboBox gt addItem someString 当我启动 GUI 应用程序时 QComboBox始终为 70 即使最小的项目要大得多 如何动态设置a的宽度QComb
  • 当我浏览 http://localhost:8004/elmah.axd 时,它会生成 404 错误

    当我浏览时http localhost 8004 elmah axd它显示应用程序中发生的错误 但也会生成 404 错误 我该如何停止这个 404 错误 404错误的详细信息是 System Web HttpException 0x8000
  • Visual Studio 2010 条件引用

    我们这里有多个产品共享一些公共库 这些库是单独解决方案的一部分 因此它们可以由TFS独立构建 但问题是在开发过程中 必须修改公共库 将其编译为二进制文件 将其复制到公共位置 编译产品解决方案 为了避免这种情况 我想知道是否可以有条件引用 因
  • 查看控制器 EXTJS 4 中的参考

    我无法在控制器中获取组合框值 组合框视图的getter方法返回 function i return this constructor apply this arguments null 而不是查看对象实例 如果我使用 var combo t
  • 未找到 QWebView 库

    当我尝试添加QWebFrame 库 我找不到它 并且答复是没有这样的文件或目录 所以知道为什么这个库不存在 我按如下方式添加库 include
  • 在 Curses 模式下,stdout 和 stderr 去哪里?

    当curses处于活动状态时 stdout和stderr去哪里 import curses sys def test streams print stdout print gt gt sys stderr stderr def curses
  • ReactJS/Express Axios POST 返回 404,来自 Postman

    我不知道我在这里做错了什么 POST 方法适用于 Postman 但不适用于 React 前端 users js api users login route POST api users login desc Login user Retu
  • 如何在不知道c中大小的情况下迭代数组[重复]

    这个问题在这里已经有答案了 我有一个指向 C 中数组的指针 我想对其进行迭代 但我不知道其大小 int array 我不确定应该如何进行 我想我应该尝试通过以下方式找到尺寸 int array size sizeof array sizeo
  • 在javascript中从剪贴板抓取部分数据

    我复制了一个大约一百万行的 Excel 表格 当我查看系统上的剪贴板时 它似乎包含大约 250MB 的数据 但是 我only需要从中获取样式信息 例如 整个数据的大小 远 不到 1MB 有没有办法像读取文件或流一样读取剪贴板 以便我可以执行
  • 时髦的 jQuery mouseleave 行为

    我有一个类似菜单的下拉容器 通过绑定 mouseleave 事件来隐藏 div div
  • 如何获取变换/旋转的 SVG 路径点

    我通过设置属性 transform rotate 45 旋转了 SVG 路径元素 现在我如何获得旋转的 SVG 路径点 当我检查属性 d 时 它仍然显示原始点 未旋转 如果您通过 path getPointAtLength 获得点 则需要将
  • 寻找包装在用户定义的 SQL 函数中包装的外部 SQL 存储过程中的任何 OS/400 API 的工作示例

    目前有两个问题 1 下面的示例使用外部 SQL 存储过程包装 OS 400 API 该存储过程是 SQL 用户定义的表函数中的进一步包装器 编译和运行都没有错误 但当传递 作为作业名称 即当前作业 时 它会返回作业信息的空白和零 任何有关原
  • 如何控制 Firefox 中表格单元格的溢出?

    我有一个表格 希望第一列有一个垂直滚动条 这在 Chrome IE9 iPad 上的 Safari 中有效 但在 Firefox 中无效 为什么不 我究竟做错了什么 HTML table tbody tr td class col1 div
  • 使用 withColumn 从查找表动态添加新列

    我将 Spark sql 2 4 1v 与 Java 8 结合使用 我有一个场景 需要从查找表中动态添加列 我有带列的数据框 A B C X Y Z 当少数 原始 列 例如 A B C 值为 null 时 我需要采用 替换列 例如 X Y
  • 返回上一个片段无法正常工作

    我正在使用导航抽屉 当我选择一个项目时 它会正确地将前一个片段替换为我选择的片段 但是如果我打开另一个片段 然后单击后退按钮 它将转到上一个活动而不是上一个活动片段 这样做有什么问题吗 private void selectItem int
  • 另一个 getView 被多次调用

    我的每一项ListView包含一个ImageView and a TextView 这将填充远程信息 我得到了一个 URLImageView 因此我开始AsyncTask下载图像并调用setImageBitmap与下载的位图 这一切进展顺利
  • 导入 Apex 时出现“UnencryptedCookieSessionFactoryConfig”错误

    我正在尝试使用 Apex 每当我尝试导入它 或涉及它的任何内容 时 我都会得到以下回溯 Traceback most recent call last File
  • 以编程方式激活 UISearchBar 会阻止用户与其交互

    我在导航控制器内有一个简单的表格视图 工具栏可见 工具栏上有一个搜索按钮 表格视图的表头视图设置为我的UISearchBar 如果我向上滚动表格视图 然后点击搜索栏将其激活 一切都会正常发生 但是 如果我点击搜索按钮 以编程方式激活搜索栏