Почему метод [UIBarButtonItem setCustomView:] отключает переход в Storyboard? - PullRequest
1 голос
/ 09 февраля 2012

У меня есть раскадровка в моем проекте. Я использую [UIBarButtonItem setCustomView:] метод для настройки кнопок панели инструментов. Например:

[self setCustomView:[[UIImageView alloc] initWithImage:image]];

Теперь они выглядят так, как мне нужно. Но я обнаружил, что этот метод как-то отключает переход, который я установил для этого элемента панели инструментов. Я имею в виду, segue работает без него, но когда я попытался использовать этот метод для настройки, segue не работает. Но почему?

Я не хочу использовать шаблон целевого действия из кода, я считаю, что возможно использовать только раскадровку.

Ответы [ 2 ]

2 голосов
/ 15 мая 2014

Я также пытался настроить все переходы в раскадровке, но мне нужно было создать собственное представление для rightBarButtonItem.Чтобы убедиться, что переход по-прежнему работает, просто добавьте эту строку перед настройкой customView:

[filterButton addTarget:self.navigationItem.rightBarButtonItem.target action:self.navigationItem.rightBarButtonItem.action forControlEvents:UIControlEventTouchUpInside];

Таким образом, сегменты, которые вы настроили в вашей раскадровке, будут по-прежнему запускаться с customViews.

Мой весьПользовательский код кнопки выглядит следующим образом:

UIButton *filterButton =  [UIButton buttonWithType:UIButtonTypeCustom];
[filterButton setImage:[UIImage imageNamed:@"filter"] forState:UIControlStateNormal];
[filterButton setFrame:CGRectMake(0, 0, 36, 36)];
[filterButton addTarget:self.navigationItem.rightBarButtonItem.target action:self.navigationItem.rightBarButtonItem.action forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.rightBarButtonItem.customView = filterButton;
1 голос
/ 09 февраля 2012

Я попробовал то, что вы сделали, с тем же результатом - картинка правильная, но UIBarButtonItem не реагирует при нажатии.Возможно, это ошибка.Моя работа заключается в следующем:

Чтобы сделать это в раскадровке, добавьте кнопку UIB на панель инструментов.Вы должны увидеть, что раскадровка добавляет его, помещая UIButton внутри UIBarButton.Добавьте переход на UIButton.Настройте UIButton в раскадровке.В моем приложении я установил размер 40 х 40. Затем в своем коде настройте UIButton с видом.Вот пример кода для добавления imageView к UIButton:

[sampleImageView setFrame:CGRectMake(0, 0, 40, 40)];
[swapButton addSubview:sampleImageView];

Примечание: раскадровка может быть немного странной при добавлении UIButton на панели инструментов.Кажется, что если вы делаете это на панели инструментов, которая привязана к контроллеру навигации, он не позволит вам добавить его.Я решил эту проблему, добавив фиктивный контроллер представления на раскадровку, добавив к нему панель инструментов, а затем перетащив кнопку UIB на эту панель инструментов.Раскадровка создаст это для вас путем инкапсуляции UIButton в UIButtonBarItem.Затем вы можете скопировать его на нужную панель инструментов в вашем проекте и удалить фиктивный контроллер вида.

Есть и другие способы сделать это, например, создать кнопки в коде и добавить их на панель инструментов.Метод выше минимизирует код.

...