当显示搜索栏时(如在 Apple 的邮件应用程序中),如何将 tableView 的编辑按钮放在工具栏中?

Posted

技术标签:

【中文标题】当显示搜索栏时(如在 Apple 的邮件应用程序中),如何将 tableView 的编辑按钮放在工具栏中?【英文标题】:How to put a tableView's Edit button in the toolbar when a search bar is shown (as in Apple's mail app)? 【发布时间】:2012-08-26 17:22:40 【问题描述】:

我想将编辑按钮放在底部的工具栏中。编辑按钮通常在viewDidLoad 中用self.navigationItem.rightBarButtonItem = self.editButtonItem 实例化,并且通常放置在导航栏中。

当试图将“编辑”按钮 (= self.editButtonItem) 放在工具栏中(通过将其添加到工具栏项目中)时,该按钮不会出现。但是,我使用 Interface Builder 添加的所有其他工具栏项都正确显示。

您如何建议将此按钮添加到工具栏?

将编辑按钮添加到工具栏的原因是当UISearchBar 启用的搜索当前处于活动状态并且搜索栏隐藏导航栏中的编辑按钮时启用表格的编辑模式。

我希望获得与 Apple 电子邮件应用程序相同的行为,当搜索处于活动状态时,工具栏中会显示“编辑”按钮。

如果有任何建议,我将不胜感激。

感谢您的帮助!!

【问题讨论】:

【参考方案1】:

您可以通过这种方式将编辑按钮添加到工具栏:

self.editButton = 
[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit 
                                             target:nil 
                                             action:nil] 
autorelease];

NSArray *toolbarItems = 
[NSArray arrayWithObjects:self.editButton,nil];

self.toolbar.items = toolbarItems; 

如果您想隐藏/显示它,只需切换其hidden 属性:

self.editButton.hidden = YES;

【讨论】:

我添加了编辑按钮,使用您的代码剪切到-searchDisplayController:didShowSearchResultsTableView:,当搜索栏显示时,该按钮显示在工具栏中。但是,当我点击“编辑”按钮时,什么也没有发生(与“真正的”编辑按钮 [editButtonItem] 不同,它从“编辑”变为“完成”并通过触发 setEditing 来切换表格的编辑模式)。让工具栏的编辑按钮以相同方式执行的最佳方法是什么?谢谢! 好吧,你必须自己实现。对于按钮,您可以将按钮替换为“完成”按钮。使用UIBarButtonSystemItemDone 而不是UIBarButtonSystemItemEdit。要将表格视图置于编辑模式,只需创建一个方法,并告诉按钮在按下时调用它。你可以这样做:[self.editButton setTarget:self];[self.editButton setAction:@selector(yourMethod)];。明白了吗?【参考方案2】:

您可以手动执行此操作,方法是创建一个样式为 UIBarButtonSystemItemEdit 的新 UIBarButtonItem。然后只需将其添加到标签栏,分配目标和操作并调用[tableView setEditing:YES animated:YES];

【讨论】:

我已经分配了目标和操作,并尝试在我的“操作”代码中将表格设置为编辑模式:- (IBAction)editToolbar:(id)sender [self.tableView setEditing:YES animated:YES]; self.editToolbarButton.title = @"Done"; 但是,只要搜索栏处于非编辑模式,表格就会保持显示。一旦搜索栏消失,表格就会进入编辑模式。但是,我需要在表格中输入带有搜索栏和搜索结果的模式(如邮件应用程序中所示)。对此有什么想法吗?

以上是关于当显示搜索栏时(如在 Apple 的邮件应用程序中),如何将 tableView 的编辑按钮放在工具栏中?的主要内容,如果未能解决你的问题,请参考以下文章

单击搜索栏时如何显示单独的视图? [SwiftUI] [关闭]

当用户键入输入栏时通过表格过滤

编辑搜索栏时将 UITableView 添加到子视图

iOS:在导航栏中显示搜索栏时隐藏范围栏

如果未关闭键盘,则在使用搜索栏时进行 segueing 会更改目标视图控制器布局

如何让一个脚本触发另一个 [jQuery] 缩小和扩展搜索框