Чтобы настроить и запустить свое пользовательское меню, я использовал UITabBarController
и мне нужно изменить представление, отображаемое программно, по сравнению со стандартным меню с вкладками на экране.
Все работает, как и ожидалось, за исключением того, что. Я пытаюсь использовать:
[self setSelectedIndex:index];
Этот код находится внутри моего подкласса UITabBarController
в пользовательском методе делегата. (Это сделано для того, чтобы я мог программно настроить вид при взаимодействии с моим меню). Однако пока этот код вызывается, он ничего не делает?
Должен ли он вызываться из одного из представлений с вкладками? Я надеялся запустить его изнутри TabBarController, чтобы избежать повторения кода в каждом подконтроллере с вкладками.
ОБНОВЛЕНИЕ:
Только что обнаружил, что использование [self setSelectedIndex:index];
отлично работает в viewDidLoad
. Но когда он вызывается внутри метода делегата, он не меняет вид. Он использует правильный номер индекса и вызывается, но ничего не делает из этого метода.
Кроме того, кажется, что контроллер вкладок - это другой объект, когда я регистрирую self
в viewDidLoad
по сравнению с моим методом делегата. Так почему бы мне потерять ссылку на исходный контроллер?
Это просто UITabBarController в контейнере в другом контроллере представления.
Код делегирования:
@Интерфейс
@protocol SLMenuDelegate <NSObject>
@required -(void)menuDidChangeViewToIndex:(NSInteger)index;
@end
@property (nonatomic, assign) id<SLMenuDelegate>menuDelegate;
@Выполнение
@synthesize menuDelegate;
self.menuDelegate = [self.storyboard instantiateViewControllerWithIdentifier:@"TabBarViewController"];
[menuDelegate menuDidChangeViewToIndex:[self.menuItemButtons indexOfObject:sender]];
UITabBarController
-(void)menuDidChangeViewToIndex:(NSInteger)index
{
[self setSelectedIndex:index];
}
Установка точек останова и запуск NSLogs, и нет никаких сомнений в том, что метод вызывается и весь код выполняется.