如何在iOS中向TableView添加工具栏

10

我正在构建一个简单的笔记应用程序,我想在TableView底部添加一个静态栏,例如,我想添加帮助按钮。如何只将其添加到我的TableView中?

目前为止:

我通过storyboard添加了一个工具栏,但这会使它粘在最后一个tableView单元格的末尾。我想将其固定在底部。我输入了以下代码进行编程:

@property (strong, nonatomic) IBOutlet UIToolbar *toolbar;

在我的tableViewController.h文件中

[self.view addSubview:_toolbar];
[self.navigationController.view setFrame:self.view.frame];

在我的tableViewController.m文件中,在我的viewDidLoad方法中。

谢谢!

8个回答

10

最好的解决方案是使用UIViewController而不是UITableViewController。(之前已经说过,但让我给您详细介绍一下)。

创建一个带有相应XIB文件的新UIViewController。在新UIViewController的视图中拖入一个UITableView,调整大小并将UIToolbar放在任何您想要的位置。

您应该有类似这样的东西:

enter image description here

黑色边框代表UIViewController的主视图。红色边框表示表格视图。蓝色边框表示工具栏。

随后,使您的UIViewController遵守两个协议:UITableViewDelegate和UITableViewDataSource。 您将手动实现其必要方法,例如cellForRowAtIndexPath、numberOfRowsInSection等,但这不应该花费您太长时间。

将您的UITableView链接到您的UIViewController。 将其“数据源”和“委托”属性也链接到视图控制器。

您将在不到15分钟内准备好设置。


好的答案,我也这么认为! - why

8

我刚刚找到了一个更好的技巧!

  1. 确保没有导航栏(避免之前尝试失败的情况)
  2. 拖动并放置一个“Bar Button Item”(Xcode 会自动将其放置在底部)
  3. 注意:如果现在运行应用程序,你看不到任何东西!(所以请继续阅读)
  4. 在viewDidLoad下添加以下代码:

    self.navigationController.toolbarHidden = NO;

完成!


很好 - 如果您不想在其他视图上使用它们,只需设置为false ... 现在我们使用Swift。 - DogCoffee
不错的技巧!!我想知道为什么工具栏默认会移到底部。这不会与苹果的 HIG 冲突吗?对于 Swift,使用 self.navigationController?.toolbarHidden = false。 - Arunabh Das

3
您可以使用带有故事板的标准UITableViewController。在“模拟指标”中,转到底部栏菜单并选择“工具栏”。 工具栏将出现。然后,您可以向其中添加按钮项。

1
这就是正确的答案。非常简单。我已经使用这种方法很多年了。为什么人们要把它搞得那么复杂呢?提供如此费解的答案! - Charles Robertson

1
通过代码添加工具栏非常简单。
UIToolbar *toobar = [[UIToolbar alloc]initWithFrame:frameYouNeed];
toobar.barStyle = UIBarStyleBlack;
[self.view addSubview:toobar];

但是,如果您将UITableView用作子视图,而不是UITableViewController,则会更好


就像@Leonnears所说的那样,将工具栏和tableView作为您的viewController的两个子视图。 - BabyPanda

0

你可以使用默认情况下包含在所有UITableView中的工具栏,并向其中添加UIBarButtonItems。尽管名称如此,UIBarButtonItems可以定制为任何类型的视图。然后将它们添加到属性self.toolbarItems中,该属性默认可用于UITableView。

UIBarButtonItem * textItem;
UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 250, 48)];
label.text =  @"ImportantText";
label.adjustsFontSizeToFitWidth = YES;
label.textAlignment = NSTextAlignmentRight;
textItem = [[ UIBarButtonItem alloc ] initWithCustomView:label];

UIBarButtonItem * switchItem;
UISwitch * switchCtrl = [[UISwitch alloc] init];
[switchCtrl addTarget:self action:@selector(toggleSomething:) forControlEvents:UIControlEventValueChanged];
switchItem = [[ UIBarButtonItem alloc ] initWithCustomView:switchCtrl];

self.toolbarItems = [ NSArray arrayWithObjects:
                     [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
                     textItem,switchItem,nil ];

0
我在Storyboard中将其工作起来了,方法是勾选导航控制器中的“显示工具栏”,然后将工具栏按钮拖到现在显示在表视图控制器底部的灰色工具栏区域。最后将这些工具栏按钮与导航控制器的方法连接起来。

0

你应该使用ViewController而不是TableViewController

然后在头文件中将你的TableView声明为IBOutlet。声明代理和数据源。你已经准备好了。


-1
尝试这个,它会将您的工具栏添加为表格的footerView。确保您已经将表格的footer高度设置为44(工具栏的高度)。
self.tableView.tableFooterView = _toolbar;

谢谢,我尝试过了,但是没有起作用。也许是我做错了什么? - user1754527
这只是将工具栏固定在tableView下方,而不是屏幕底部。 - Ömer Faruk Almalı

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接