2012-04-12 3 views
0

Я пытаюсь сделать обычай UIToolbar, который обрабатывает поворот и пользовательскую настройку. Когда он находится в режиме портрета, некоторые из barbuttonitems не будут видны, поэтому я добавляю кнопку «больше», из которой открывается небольшое представление с этими элементами. Моя проблема в том, что когда моя текущая ориентация - портрет, и когда я выбираю видимый barbuttonitem (который не находится в popup), я хочу закрыть всплывающее окно, если оно открыто. Я хочу, чтобы поведение smae для uibarbuttons в popupview закрывало всплывающее окно после нажатия.Заменить или расширить селектор UIBarButtonItem

Так что я пытаюсь как-то заменить селектор UIBarButtonItem с моим собственным, в котором я называю уже определенные действия, например:

-(SEL)extendOriginal:(UIBarButtonItem *) uibb 
{ 
    if (popup) popup.hidden = YES; 
    [uibb.target performSelector:uibb.action]; 
    // return ?? do what ?? 
} 

Но как я заменить оригинальный селектор для вызова этого обычая метод с моим пользовательским UIToolbar в качестве цели? Или как я могу «расширить» исходный селектор этим вызовом? Извините, если вопрос неутешительный :)

Редактировать: Другими словами, я хочу 2 действия с двумя отдельными целями, которые будут выполняться при использовании UIBarButtonItem.

Спасибо!

ответ

0

Наконец, я нашел способ сделать это, не самый красивый, но это работает.

В пользовательском классе панели инструментов я создал в своем методе макета UITapGestureRecognizer для обработки кранов. Я установил cancelsTouchesInView ложь и в методе

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 

Я возвращаюсь верно только для подвидов моей панели инструментов.

Таким образом, исходная цель и действие каждого UIBarButtonItem остаются неизменными, а дополнительный код для обработки моего всплывающего окна - это действие UIGestureRecognizer. Еще одна проблема заключалась в том, чтобы различать постукиваемые элементы на панели инструментов (отображаемый вид в touch.view - это недокументированный вид, yay), в конце концов я сделал это с некоторыми BOOL iVars.

Я надеюсь, что это поможет кому-то с той же проблемой.

0

Этот -(SEL)extendOriginal:(UIBarButtonItem *) uibb не имеет никакого смысла.

Я предполагаю, что вы где-то задаете цель и действие элемента кнопки. Там вы можете установить любой метод с одним аргументом id или UIBarButtonItem* в качестве селектора.

Поэтому попробуйте изменить код

- (void)myMethod:(UIBarButtonItem *) uibb 
{ 
    if (popup) popup.hidden = YES; 

    // do cool stuff here 
} 

и поставить перед собой цель, как

[[UIBarButtonItem alloc] initWithTitle: @"Blabla" style: UIBarButtonItemStylePlain target: self action: @selector(myMethod:)]; 
+0

Да, я знаю, что это не имеет смысла :) Я добавляю UIBarButtonItems в viewcontroller, у которого есть одна из моих настраиваемых панелей инструментов. Моя проблема заключается в том, что я хочу реализовать ее прозрачно, поэтому другой диспетчер представлений, в котором определены действия кнопки, не должен иметь никакого кода для этой детали реализации (кстати, в настоящее время он имеет, но именно поэтому я wnt настраиваемая панель инструментов для автоматической обработки этой проблемы. – Templar

+0

Отредактировал мой вопрос, если быть более точным. – Templar

Смежные вопросы