Настройка UITabBarController's moreNavigationController - PullRequest
7 голосов
/ 08 декабря 2010

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

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

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 03 мая 2011
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!
}
4 голосов
/ 02 марта 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...