2010-12-08 4 views
6

Я сейчас в процессе настройки «Больше» в UITabBarController моего приложения.Настройка UITabBarController moreNavigationController

Из того, что я вижу в документах, есть небольшая поддержка для его настройки. Существует только свойство только для чтения UITabBarController, называемое «moreNavigationController», которое указывает на UINavigationController.

Это позволяет нам хотя бы настроить его UINavigationBar. Настройка представления таблицы, представленная в первом представлении, немного сложнее.

По другим вопросам здесь, в SO и в других местах, я видел, что все разговоры вращаются вокруг взаимодействия с внутренней структурой moreNavigationController (например, наблюдая, что первый контроллер представления в стеке является UITableViewController, заменяя его данными контроллер и т. д.). Проблема заключается в том, что все эти методы делают предположения о том, как ведет себя недокументированный код в API, предположения, которые вряд ли будут надежными в будущем.

Единственная альтернатива, которую я вижу здесь, заключается в том, чтобы свернуть собственный пользовательский «более контроллер» (необязательно, чтобы отредактировать функциональность редактирования, чтобы сделать реализацию довольно простой) и использовать ее в качестве пятого контроллера представления на вкладке. Разумеется, необходимо позаботиться о том, чтобы назначить последующие контроллеры представлений пользовательскому «более контроллеру», а не непосредственно в UITabBarController (для выполнения этого правила может потребоваться подкласс UITabBarController).

Какой подход вы бы выбрали? Какие другие решения вы бы предложили?

ответ

4

я выбрал бы свернуть свой собственный контроллер по 3 причинам:

  1. moreViewController контролируется UIKit. Внешне очень сложно настроить некоторые виды и напрямую контролировать их. В moreViewController будут обнаружены непредсказуемые методы и определения слоев. Он не может быть основным UITableViewController. Я думаю, что настройка классов, в которых есть делегаты, более эффективна.

  2. Если вы настроили moreViewController, возможно, вам придется выпускать новую версию своего приложения каждый раз, когда Apple выпускает новый iOS. Разработчики moreViewController в Apple могут изменить весь класс на что-то еще. Таким образом, ваше приложение перестанет отвечать на запросы.

  3. Мой собственный класс, мой собственный дом. Я могу делать все, что я хочу.

4
UIViewController *tbMore = 
    ((UIViewController*) 
    [self.moreNavigationController.viewControllers objectAtIndex:0]); 

int nRows = [((UITableView *)tbMore.view) numberOfRowsInSection:0]; 

for (int i = 0; i < nRows; i++) 
{ 
    UITableViewCell *c = 
     [((UITableView *)tbMore.view) 
     cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]]; 

    // Do any additional customization here! 
} 
Смежные вопросы