LeftBarButtonItem有两个按钮。一个按钮不响应敲击

时间:2011-12-02 19:32:07

标签: ios uinavigationcontroller uibarbuttonitem uinavigationitem

所以我在leftBarButtonItem中有两个按钮。这是我的代码。

NSString *todayString = @"...";
UIBarButtonItem *todayButton = [[[UIBarButtonItem alloc] initWithTitle:todayString style:UIBarButtonItemStyleBordered target:self.calendarController action:@selector(todaySelected)] autorelease];

NSString *weeklyString = @"...";
UIBarButtonItem *weeklyButton = [[[UIBarButtonItem alloc] initWithTitle:weeklyString style:UIBarButtonItemStyleBordered target:self action:@selector(weekSelected)] autorelease];
UIToolbar *toolbar = [[[UIToolbar alloc] init] autorelease];

[toolbar setItems:[NSArray arrayWithObjects:todayButton, weeklyButton, nil]];

self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:toolbar] autorelease];

按钮的标题是动态的。有时标题会有点长。按钮扩展,看起来很好。但是,如果标题太长,似乎UIToolbar达到某个宽度最大值,因为按钮停止响应特定X点处的点击。 See image here

绿色表示响应触摸,红色表示不响应触摸。 “今日”按钮响应触摸。然而,“每周”按钮仅响应触摸直到第二个“e”。之后的任何事情都不会对触摸做出反应。

我一直在试图解决这个问题一段时间,没有运气。我尝试扩展UIToolbar和leftBarButtonItem的框架。有谁知道发生了什么?提前致谢

3 个答案:

答案 0 :(得分:2)

您的工具栏框架宽度可能太窄。在您的代码中,您甚至不设置其大小,并依赖它来为您调整大小。尝试将其设置为更大的宽度,并确保autoresizingMask没有设置“UIViewAutoresizingFlexibleWidth”。

一个好的调试技巧是将新工具栏的背景颜色设置为明亮的(与您正在安装它的工具栏形成对比),并观察其大小调整以了解按钮是如何以交互方式进行剪裁的。

如果更新条形按钮项目标题,如果将其固定到某个宽度对您的应用来说限制太多,则可能需要显式调整大小。

答案 1 :(得分:1)

你需要创建一个可操作的自定义按钮视图,例如UIButton:

UIButton *newButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [newButton addTarget:self action:@selector(newAction:) forControlEvents:UIControlEventTouchUpInside];
    [newButton setTitle:@"New Button" forState:UIControlStateNormal];
    UIBarButtonItem *newBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:newButton];
    self.navigationItem.leftBarButtonItem = newBarButtonItem;

例如。

编辑 - 现在我看到你在做什么,我为早先的困惑道歉。您正在向左侧添加一组按钮。尝试调整工具栏的框架,使按钮适合交互区域:

NSString *todayString = @"...";
        UIBarButtonItem *todayButton = [[UIBarButtonItem alloc] initWithTitle:todayString style:UIBarButtonItemStyleBordered target:self action:nil];

        NSString *weeklyString = @"...";
        UIBarButtonItem *weeklyButton = [[UIBarButtonItem alloc] initWithTitle:weeklyString style:UIBarButtonItemStyleBordered target:self action:nil];
        UIToolbar *toolbar = [[UIToolbar alloc] init];
        [toolbar setFrame:CGRectMake(0, 0, 320, 50)];

        [toolbar setItems:[NSArray arrayWithObjects:todayButton, weeklyButton, nil]];

        self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:toolbar];

答案 2 :(得分:0)

我知道这是一个老问题,但在我找到更新信息之前,它让我误入歧途。我无法在iOS 7中使用上面提到的技术,因为嵌入式工具栏不会与其父级对齐。 无论如何,iOS 5(我相信)为左右项添加了按钮数组:

UIBarButtonItem * trashItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:self action:@selector(onTrashClick:)];
UIBarButtonItem * mailItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(onActionClick:)];
self.navigationItem.rightBarButtonItems = [[NSArray alloc] initWithObjects: refreshBtn, selectYearBtn, nil];