UISearchBar 与普通 UIView 中的控制器?

发布于 2024-08-13 23:15:29 字数 755 浏览 10 评论 0原文

我想要的:

顶部有 UISearchBar 的 UIView。开始编辑 searchBar 会使当前视图变暗并显示来自另一个 [UITableView]Controller 的搜索结果。

我尝试过的:

在 Interface Builder 中:

  • 将“搜索栏和搜索显示控制器”添加到 UIView。
  • 为我的 UITableViewController 添加一个占位符对象
  • 添加一个 UITableView 对象并将其设置为 UITableViewController 的视图
  • 将 UISearchBar 的委托设置为 UITableViewController
  • 将 UISearchDisplayController 上的所有出口设置为 UITableViewController

在代码中:

  • 将 UISearchBarDelegate、UISearchDisplayDelegate 协议添加到UITableViewController

我得到的:

点击编辑搜索字段会使应用程序崩溃。没有错误消息,并且仅调用 UITableViewController 中的“viewDidLoad”方法。

结论:

如何为 UIView 中的 UISearchBar 使用外部控制器?

What I want:

A UIView with a UISearchBar at the top. Starting to edit the searchBar dims the current view and shows search results from another [UITableView]Controller.

What I've tried:

In Interface Builder:

  • add a "Search Bar and Search Display Controller" to the UIView.
  • add a placeholder object for my UITableViewController
  • add a UITableView object and set it as the view for the UITableViewController
  • set the delegate for the UISearchBar to the UITableViewController
  • set all the outlets on the UISearchDisplayController to the UITableViewController

In Code:

  • add the UISearchBarDelegate, UISearchDisplayDelegate protocols to the UITableViewController

What I'm getting:

Tapping to edit the search field crashes the app. No error messages, and only the "viewDidLoad" method in the UITableViewController gets called.

In Conclusion:

How do I go about using an external controller for a UISearchBar that is in a UIView?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一桥轻雨一伞开 2024-08-20 23:15:29

好的,所以我已经弄清楚了。我发誓这是我首先尝试的事情之一,但显然我没有做得正确。

在我的 UIViewController(其中包含 UISearchBar 的那个)中,我实例化了一个 UISearchDisplayController

// sb = IBOutlet UISearchBar  
sc = [[SearchController alloc] initWithStyle:UITableViewStylePlain];  
sdc = [[UISearchDisplayController alloc] initWithSearchBar:sb contentsController:sc];  
sb.delegate = sc;  
sdc.delegate = sc;  
sdc.searchResultsDelegate = sc;  
sdc.searchResultsDataSource:sc = sc;  `

其中 SearchController 是我的 UITableViewController 的子类,并适应 UISearchBarDelegateUISearchDisplayDelegate< /代码> 协议。

现在我想了一下,使用从 IB 链接的一个可能也可以工作(并且以相同的方式)...

所以上面的内容对我有用,但现在结果 tableView 不会显示,除非我手动添加它到主视图: [self.view addSubview:sc.tableView]; 但我想这是另一个问题的素材。

网络上没有任何关于非自我委托的 UISearchDisplayController 的文档(就我的 google-fu 而言),所以希望有一天这可以帮助另一个 Obj-C 菜鸟。

Ok, so I've figured it out. I swear this is one of the first things I tried, but obviously I didn't do it correctly.

In my UIViewController (the one that has the UISearchBar in it), I instantiate a UISearchDisplayController:

// sb = IBOutlet UISearchBar  
sc = [[SearchController alloc] initWithStyle:UITableViewStylePlain];  
sdc = [[UISearchDisplayController alloc] initWithSearchBar:sb contentsController:sc];  
sb.delegate = sc;  
sdc.delegate = sc;  
sdc.searchResultsDelegate = sc;  
sdc.searchResultsDataSource:sc = sc;  `

Where SearchController is my subclass of UITableViewController and adapts the UISearchBarDelegate and UISearchDisplayDelegate protocols.

Now that I think about it, using one linked from IB would probably work just as well (and in the same way)...

So the above works for me, but now the results tableView doesn't show up unless I manually add it to the main view: [self.view addSubview:sc.tableView]; but that's fodder for another question, I suppose.

There isn't any documentation on the web (as far as my google-fu is concerned) of a non-self-delegated UISearchDisplayController, so hopefully this helps out another Obj-C noob someday.

幻梦 2024-08-20 23:15:29

一方面,如果您的 Controller 类是从 UITableViewController 扩展的,并且您使用 Interface Builder,则其中不能有搜索栏。相反,从 UIViewController 扩展并自行遵守表数据源和委托协议。

但是,是的,为了让这个答案对你来说是一个好的答案,你必须在你的问题中添加一些代码或其他东西。

For one thing, if your Controller class is extending from UITableViewController, you can't have a search bar in it if you're using Interface Builder. Instead, extend from UIViewController and conform to the Table Data Source and Delegate protocols on your own.

But yeah, for that answer to be a good one for you, you're going to have to add some code or something to your question.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文