2010-03-25 6 views
1

У меня есть простое приложение, в котором единственный контроллер просмотра имеет выход к UITabBar. Он также реализует UITabBarDelegate и устанавливается в качестве делегата для UITabBar:UITabbar без контроллера

@interface TheMainViewController : UIViewController <UITabBarDelegate> 
{ 
     IBOutlet UITabBar *theTabBar; 
} 

я реализовал следующий метод, который будет вызываться всякий раз, когда какой-либо из моих 4 UITabBarItems получить постучал. Я пытался просто делать что-то на самом деле просто:

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item 
{ 
     tabBar.selectedItem = [tabBar.items objectAtIndex:0]; 
     return; 
} 

В теории, он должен всегда оставаться выбран на моей первой вкладке, и это прекрасно работает, когда я просто нажмите любую UITabBarItem (ничего не происходит, первый всегда остается выбран). Но когда я касаюсь UITabBarItem и удерживаю его (не отводя мой палец), выбор меняется в любом случае! Отладка, все правильно называется.

Как будто изменение свойства selectedItem не имеет никакого эффекта, пользователь все еще имеет элемент «вниз» (пальцем на нем).

Что было бы хорошим обходным решением? Я попытался перегрузить UITabBar и возиться с touchhesBegan и touchhesEnd, но они даже не вызываются. То же самое с UITabBarItem.

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

Так разочарование .... спасибо!

ответ

2

Кажется, что - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item вызывается, когда пользователь берет свой палец и не раньше этого.

Я знаю, что вы не хотите использовать UITabBarController, но у вас есть все функции, которые вы хотите здесь. Почему вы не хотите использовать контроллер?

UITabBarController метод делегата, который должен работать:

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController 

Затем вы можете вернуть NO там, и выбор не изменится.

+1

Ну в основном у меня уже есть целая куча других видов, которые анимируются в зависимости от статуса вкладки (больше, чем вставлять и выходить). Кроме того, моя вкладка не находится внизу, как это делает контроллер. Для переключения на контроллер потребуется большой рефакторинг, которого я хочу избежать. Что касается других замечаний, когда вы щелкаете и удерживаете tabbaritem, функция «didselectitem» вызывается после небольшой задержки, даже если фактический элемент подсвечивается только при отпускании. – Etienne