2015-06-14 1 views
1

У меня есть сегментированный элемент управления с тремя сегментами. «Крупный рогатый скот», «Овцы» и «Козы». В овцах и козах есть еще один сегментированный контроль «RFID» и «Толпа»Виды контейнеров с сегментированным управлением в быстром

Я использовал три вида контейнера на родителе ViewController, в cattleView, вид sheepGoatMob и виде sheepGoatRFID которые имеют UITableViewControllers CattleTableViewController, SheepGoatMobTableViewController и SheepGoatRfidTableViewController. Родительский вид содержит оператор if, чтобы скрыть/показать каждый вид, который работает нормально ..

Проблема, с которой я сталкиваюсь, заключается в том, что каждое дочернее представление должно иметь возможность отправлять информацию на своих страницах в службу мыльного веб-сайта из UIBarButtonItem на родительском представлении. Моя первая мысль заключалась в том, чтобы в каждом дочернем представлении была кнопка «отправить», но поскольку все три представления загружаются в память при запуске приложения, кнопка не знает, какую функцию просмотра вызывать.

EDIT: Как я могу выполнить настройку кнопки в каждом из трех представлений для UIBarButtonItem родительского контроля viewController и разрешить правильную функцию из childViewControllers?

Вариант 2: Как я мог получить доступ к функции в трех childviewcontroller через в UIBarButtonItem на родительском ViewController?

+0

Обычно вы используете делегаты для передачи действий по иерархии представлений. Таким образом, вы создадите делегат для каждого контейнера, который отправляет событие «didTapButton» в свой делегат, который будет «mainViewController», который затем выполняет ваш сетевой вызов. – DBoyer

+0

Спасибо, я дам вам попытку и отправлю свое решение. – Tyron

+0

@DBoyer Проблема в том, что каждая из моих функций находится в childViewControllers, а не в mainViewController. Мне нужно иметь кнопку на parentViewController для запуска этих функций. На данный момент я получаю: Предупреждение: попытка представить в , чей вид не находится в иерархии окон! – Tyron

ответ

0

Я нашел решение, чтобы иметь все три вида загружен в память и быть в состоянии изменить какую функцию я звоню с помощью @ ответ Юлиана: Objective-c: How to invoke method in container view controller

//Determine which view is showing and point to the correct child class 
func sendTransactionButton(sender: UIBarButtonItem) { 
    log.debug("send transaction button called p2p") 

    for childViewController in self.childViewControllers { 

     if childViewController.isKindOfClass(CattleTableViewController) && containerTableViewCattle.hidden == false { 

      var cattleVC = childViewController as! CattleTableViewController 
      cattleVC.transactions() 

     } else if childViewController.isKindOfClass(SheepGoatRfidTableViewController) && containerSheepGoatsRfid.hidden == false { 

      var sheepGoatRFIDVC = childViewController as! SheepGoatRfidTableViewController 
      sheepGoatRFIDVC.transactions() 

     } else if childViewController.isKindOfClass(SheepGoatTableViewController) && containerTableViewSheepGoats.hidden == false { 

      var sheepGoatsMob = childViewController as! SheepGoatTableViewController 
      sheepGoatsMob.transactions() 
     } 
    } 
} 

Вы должны убедиться, что другие виды скрыты или вы получите предупреждение от xcode.