5

在 iPhone 模拟器的纵向模式或设备上的横向模式下,它会显示所有导航栏按钮,但在设备上的纵向模式下使用时,按钮不会显示。下面是导航栏的图片。

模拟器显示按钮

设备不显示按钮

我用于测试的设备是运行 iOS 6.1.3 (10B329) 的 iPhone 4S。我使用的模拟器是运行 iOS 6.0/6.1 的版本 7.0 (463.9.4)。

我正在考虑在编辑模式下删除“搜索”按钮,但无论模式如何,我都希望让用户可以使用此选项。

感谢任何帮助或见解,谢谢。

编辑:viewDidLoad:最初为 ViewController 创建并添加了正确的按钮,如下所示:

_deleteBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:self action:@selector(deleteRows:)];
_deleteBarButtonItem.tintColor = [UIColor redColor];

_searchBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSearch target:self action:@selector(searchButtonClicked:)];

self.navigationItem.rightBarButtonItems = @[_searchBarButtonItem, self.editButtonItem];

进入编辑模式时:

- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    [super setEditing:editing animated:animated];

    if (self.tableView.isEditing) {
        // turn off editing
        _deleteBarButtonItem.enabled = NO;
        [self.tableView setEditing:NO animated:animated];
        [self.editButtonItem setStyle:UIBarButtonItemStylePlain];
        self.navigationItem.rightBarButtonItems = @[_searchBarButtonItem, self.editButtonItem];
    } else { 
        // turn on editing
        [self.tableView setEditing:YES animated:animated];
        [self.editButtonItem setStyle:UIBarButtonItemStyleDone];
        self.navigationItem.rightBarButtonItems = @[_searchBarButtonItem, _deleteBarButtonItem, self.editButtonItem];
    }
}
4

2 回答 2

1

老实说,这很好奇。也许是标题的某些属性使其占主导地位。以我的经验,在“编辑模式”期间最好少一些选项。如果你决定走那条路,这里有一个小代码可能会有所帮助。(当然,您的变量名很可能不同)

// Get the reference to the current toolbar buttons
NSMutableArray *toolbarButtons = [self.toolbarItems mutableCopy];

if (editing) {
    // This is how you remove the button from the toolbar and animate it
    [toolbarButtons removeObject:self.myButton];
    [self setToolbarItems:toolbarButtons animated:YES];
} else {
    // This is how you add the button to the toolbar and animate it
    if (![toolbarButtons containsObject:self.myButton]) {
        // The following line adds the object to the end of the array.  
        // If you want to add the button somewhere else, use the `insertObject:atIndex:` 
        // method instead of the `addObject` method.
        [toolbarButtons addObject:self.myButton];
        [self setToolbarItems:toolbarButtons animated:YES];
    }
}
于 2013-11-04T15:56:16.043 回答
0

我在肖像模式下为特定的 iPhone 选择了“更少的选项”选项,因为我找不到消失按钮的合适解决方案,而且确实没有足够的空间。在横向和 iPad 上,第三个按钮_searchBarButtonItem有显示空间,因此显示出来。

以下是我为获得所需行为所做的更改。我希望有些人会发现这很有用。

-(void) viewDidLoad {
    ...
    self.navigationItem.rightBarButtonItems = @[_searchBarButtonItem, self.editButtonItem];
}

- (void) viewWillAppear:(BOOL)animated
{    
    [super viewWillAppear:animated];

    if (self.playerTableView.isEditing && !IS_IPAD)
    {
        if (UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation]))
        {
            self.navigationItem.rightBarButtonItems = @[_deleteBarButtonItem, self.editButtonItem];
        }
        else
        {
            self.navigationItem.rightBarButtonItems = @[_searchBarButtonItem, _deleteBarButtonItem, self.editButtonItem];
        }
    }
}

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];

    if (self.playerTableView.isEditing && !IS_IPAD)
    {
        if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation))
        {
            self.navigationItem.rightBarButtonItems = @[_deleteBarButtonItem, self.editButtonItem];
        }
        else
        {
            self.navigationItem.rightBarButtonItems = @[_searchBarButtonItem, _deleteBarButtonItem, self.editButtonItem];
        }
    }
}

- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    [super setEditing:editing animated:animated];
    ...    
    if (self.playerTableView.isEditing) {
         ...
         self.navigationItem.rightBarButtonItems = @[_filterBarButtonItem, self.editButtonItem];
    } else {
        ...
        if (!IS_IPAD && UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation]))
        {
            self.navigationItem.rightBarButtonItems = @[_deleteBarButtonItem, self.editButtonItem];
        }
        else
        {
            self.navigationItem.rightBarButtonItems = @[_searchBarButtonItem, _deleteBarButtonItem, self.editButtonItem];
        }
    }
}
于 2013-11-08T15:31:43.633 回答