Nano Hash - криптовалюты, майнинг, программирование

Программный выбор представления TabBarController?

Чтобы настроить и запустить свое пользовательское меню, я использовал 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, и нет никаких сомнений в том, что метод вызывается и весь код выполняется.


  • Нет, вы определенно можете вызвать метод setSelectedIndex из своего файла Ccustom TabBarCviewController. Ваш, скорее всего, не работает, потому что вы не связали свой собственный TabBarViewcontroller с TabBarViewController вашего построителя интерфейса. поэтому добавьте эту строку NSLog(@"selected index: %i",[self selectedIndex]); в свой метод viewDidLoad в вашем пользовательском файле TabBarViewController.m и, пожалуйста, скажите мне, что напечатано 09.01.2014
  • Вот что я получил из консоли: selected index: 2147483647. Интересный. Я установил собственный класс UITabBarController в своей раскадровке, если вы это имеете в виду? 09.01.2014
  • Только что обнаружил, что использование [self setSelectedIndex:index]; отлично работает в viewDidLoad. Но когда он вызывается внутри метода делегата, он не меняет вид. Он использует правильный номер индекса и вызывается, но ничего не делает из этого метода. 09.01.2014
  • Проверьте мой оригинальный вопрос, узнал некоторую интересную дополнительную информацию! 09.01.2014
  • вставьте свой код метода делегата, также добавьте оператор nslog в свой метод делегата и убедитесь, что он вызывается :) 09.01.2014
  • Обновил вопрос с этой информацией. Все вызывается и работает. 10.01.2014
  • Вы не возражаете, если я проверю ваш базовый проект со своей стороны, чтобы посмотреть, что происходит? Если хотите, могу посмотреть поближе :) 10.01.2014
  • давайте продолжим это обсуждение в чате 10.01.2014
  • Спасибо @Pavan, но мне удалось найти решение! С вашей помощью, покопавшись, я выработал решение и опубликовал свой ответ. 10.01.2014

Ответы:


1

Попробуйте использовать отложенную производительность:

 dispatch_async(dispatch_get_main_queue(), ^{
      [self setSelectedIndex:index];
 });
09.01.2014

2

Мне не удалось найти решение конкретной проблемы, но я нашел не менее хороший способ решить мою проблему просто.

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

SLTabBarViewController *tabBar = [self.childViewControllers objectAtIndex:0];
[tabBar setSelectedIndex:[self.menuItemButtons indexOfObject:sender]];

Это получает встроенный контроллер панели вкладок, и я просто напрямую меняю представление из исходного контроллера представления, из которого исходит нажатие кнопки.

Возможно, это не самое умное решение, но оно простое и функциональное, не создающее никаких проблем.

09.01.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..