LeftBarButtonItem с двумя кнопками. Одна кнопка не отвечает на нажатие - PullRequest
2 голосов
/ 02 декабря 2011

Итак, у меня есть две кнопки слеваBarButtonItem.Это мой код.

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. См. Изображение здесь

Зеленый обозначает реакцию на прикосновение, а красный не реагирует на прикосновение.Кнопка «Сегодня» реагирует на прикосновения.Кнопка Еженедельно, однако, реагирует только на прикосновения, пока не появится второе «е».Все, что после этого не реагирует на прикосновения.

Я бился головой, пытаясь исправить это некоторое время, но безуспешно.Я попытался расширить фрейм как UIToolbar, так и leftBarButtonItem.Кто-нибудь знает, что происходит?Заранее спасибо

Ответы [ 3 ]

2 голосов
/ 02 декабря 2011

Возможно, ширина рамки вашей панели инструментов слишком мала.В вашем коде вы даже не устанавливаете его размер, и полагаетесь на то, что он будет соответствовать его размеру.Попробуйте установить его на большую ширину, и убедитесь, что autoresizingMask не имеет установленного `UIViewAutoresizingF FlexibleWidth '.

Хорошая техника отладки - установить цвет фона новой панели инструментов на какой-нибудь яркий (в отличие от панели инструментов, на которую вы ее устанавливаете), и просмотрите ее размеры, чтобы увидеть, как ваша кнопка обрезается при взаимодействии.

Возможно, вам потребуется явно изменить его размер при обновлении заголовков элементов панели кнопок, если фиксирование его на определенной ширине слишком ограничивает ваше приложение.

1 голос
/ 06 декабря 2011

Вам нужно будет создать настраиваемый вид кнопки, который будет работать с чем-то вроде 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];
0 голосов
/ 08 октября 2013

Я знаю, что это старый вопрос, но он немного сбил меня с толку, пока я не нашел обновленную информацию.Я не мог использовать технику, упомянутую выше в 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];
...