我试图在导航控制器内的TableViewController底部显示工具栏项。我已经用Swift编写了这段代码。

我使用Xcode默认的主从模板创建项目,并在MasterTableViewController的ViewDidLoad方法中编写了以下代码。

请帮助我解决此问题。

请在下面找到代码片段。

override func viewDidLoad() {

    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    self.addToolBar();
}


func addToolBar ()->Void {

        self.hidesBottomBarWhenPushed = false

        var toolBarItems = NSMutableArray()

        var systemButton1 = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Play, target: nil, action: nil)
        toolBarItems.addObject(systemButton1)

        var systemButton2 = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
        toolBarItems.addObject(systemButton2)

        var systemButton3 = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Trash, target: nil, action: nil)
        toolBarItems.addObject(systemButton3)

        self.navigationController?.toolbarHidden = false
        self.setToolbarItems(toolbarItems, animated: true)
        //self.navigationController?.toolbarItems = toolbarItems;

    }

但是有趣的是,用Objective-C编写的相同代码可以正常工作,并在底部显示工具栏,其中包含两个项目
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.navigationItem.leftBarButtonItem = self.editButtonItem;

    [self addToolbar];
}

-(void) addToolbar
{
    self.hidesBottomBarWhenPushed = NO;

    NSMutableArray *items = [[NSMutableArray alloc] init];

    UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlay target:nil action:nil];
    [items addObject:item1];

    UIBarButtonItem *item2 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
    [items addObject:item2];

    UIBarButtonItem *item3 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:nil action:nil];
    [items addObject:item3];


    self.navigationController.toolbarHidden = NO;
//    self.navigationController.toolbarItems = items;
//
    [self setToolbarItems:items animated:YES];
}

最佳答案

您的代码中有一个很小的错字。我为您强调了不同之处:

var toolBarItems = NSMutableArray()
//      ^
// [...]
self.setToolbarItems(toolbarItems, animated: true)
//                       ^

您的代码基本上是这样做的(带有动画):
self.toolbarItems = self.toolbarItems

您将toolbarItems数组设置为当前的toolbarItems数组,该数组为空。

当您使用self.setToolbarItems(toolBarItems, animated: true)时,它将起作用。

10-06 13:04