2012-03-23 4 views
1

Я конвертировал приложение для использования раскадровки. Я уверен, что это простая проблема, но почему-то я не могу понять, «правильный» способ сделать это, как мы, из старого мира XIB.Передача данных между представлениями с помощью UITabBarController при использовании раскадровки

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

Действие, запускающее этот набор вкладок, отлично работает; Я обнаруживаю segue и устанавливаю некоторые свойства данных в моем (пользовательском) UITabBarController.

Далее, я хотел бы иметь возможность передавать эти данные дочерним представлениям при их создании. Но поскольку эти вкладки являются просто «отношениями», а не «сеге», я не могу делать то, что я делаю везде, что переопределяет функцию «readyForSegue».

В старой вселенной XIB я бы просто привязал некоторые IBOutlets вместе между контроллером табуляции и дочерними представлениями. Но я не могу этого сделать в раскадровки, потому что родитель и дети - это отдельные «сцены».

Я попытался сделать мой класс UITabBarController реализовать свой собственный делегат, переопределение «didSelectViewController» и делать «self.delegate = сам», который почти работы, за то, что он никогда не вызывается с вкладки сначала, когда, кроме представление первоначально показано.

Что такое «правильный» (или «лучший») способ сделать это? Пожалуйста, не говорите мне, чтобы получить/установить какую-то ценность в делегате приложения, так как это «глобальная переменная» - скверная.

ответ

1

Попробуйте пройти через контроллеры вида на UITabBarController, например. в этом примере метод setData вызывается из segue in в UITabBarController, а затем проходит через контроллеры дочерних представлений, делая аналогичный вызов на дочернем контроллере, чтобы также установить данные;

- (void)setData:(MyDataClass *)newData 
{ 
    if (_myData != newData) { 
     _myData = newData; 

     // Update the view. 
     [self configureView]; 
    } 

} 

- (void) configureView { 
     for (UIViewController *v in self.viewControllers) 
     { 
      if ([v isKindOfClass:[MyDetailViewController class]]) 
      { 
       MyDetailViewController *myViewController = v; 
        [myViewController setData:myData]; 
      } 
     } 
} 
Смежные вопросы