Подтвердить что ты не робот

Какой правильный способ добавить ToolBar в UITableView?

Я пишу приложение для навигации на основе навигации, и я хотел бы, чтобы UIToolBar был состыкован в нижней части экрана, с прокруткой UITableView между панелью инструментов и навигационной панелью.

Я видел пару форумов, на которых было предложено, чтобы View Controller, обрабатывающий это представление, был стандартным UIViewController, а не UITableViewController. Контроллер представления должен был бы реализовать делегат UITableView и методы источника данных в дополнение ко всем стандартным переопределениям UIViewController. Какую (если есть) встроенную функциональность мне нужно воссоздать в этом подклассе контроллера вида, отличном от вышеупомянутых протоколов, чтобы заставить его действовать как UITableViewController? Я что-то теряю, идя по этому маршруту?

Или было бы лучше вложить UITableViewController внутри стандартного UIViewController?

4b9b3361

Ответ 1

Как и OS 3.0, контроллер навигации имеет встроенную панель инструментов. Чтобы она появилась:

[self.navigationController setToolbarHidden:NO];

Применяя:

- (void)setToolbarItems:(NSArray *)toolbarItems animated:(BOOL)animated

в вашем контроллере просмотра вы можете настроить элементы панели инструментов.

Поэтому вам больше не нужно беспокоиться о том, где панель инструментов находится в вашей иерархии.

(исправленная опечатка)

Ответ 2

Кори Флойд в основном правильный, за исключением того, что

[self.navigationController setToolBarHidden:NO];

должен быть

[self.navigationController setToolBarHidden:NO];

То есть, "b" в "setToolbarHidden" должен быть строчным. Кроме того, имя метода, перечисленное в Справочник по iPhone OS на самом деле

- (void)setToolbarHidden:(BOOL)hidden animated:(BOOL)animated

хотя, похоже, работает и параметр animated.

Ответ 3

//Tool bar
[self.navigationController setToolbarHidden:NO];

UIBarButtonItem *buttonItem = [[ UIBarButtonItem alloc ] initWithTitle: @"Select All"
                                                style: UIBarButtonItemStyleBordered
                                               target: self
                                               action: @selector(selectAll:) ];
UIBarButtonItem *buttonNext = [[UIBarButtonItem alloc]initWithTitle:@"Next" style:UIBarButtonItemStyleBordered target:self action:@selector(goNext:)];
self.toolbarItems = [ NSArray arrayWithObjects: buttonItem, buttonNext, nil ];

[ buttonItem release ];
[buttonNext release];

Ответ 4

Все, что вам нужно, это реализовать методы UITableViewDelegate и UITableViewDatasource, необходимые для уровня требуемого уровня представления табличного представления. Эти методы могут быть в любом классе (классах), хотя указанные классы должны соответствовать соответствующим протоколам. Делегат и источник данных должны быть установлены в экземпляре UITableView - либо программно, либо с помощью Interface Builder. В соответствии с документами вы теряете функциональность - см. Раздел .

Лично я считаю, что многие разработчики, похоже, одержимы тем, что предоставляют все эти функции в одном классе контроллера монолитного представления, и что, поскольку у них есть представление таблицы в их представлении, необходимо использовать подкласс UITableViewController. Тем не менее, мне нравится рассматривать принцип единой ответственности и часто нарушает источник данных и делегирует его на отдельные классы, когда сложность - это нечто иное, чем простое. Код также не привязан к конкретной реализации UIViewController.

В ситуациях, когда у меня есть отдельные классы datasource/delegate, я часто создаю и подключаю их к представлению таблицы с помощью Interface Builder, а не в коде. Этот подход (по крайней мере для меня) находится в духе "Injection of Dependency" и сохраняет текст кода котельной и дает некоторый уровень decoupling.

На эти варианты, конечно, влияет сложность функциональных возможностей, которые вы пытаетесь достичь - для простых реализаций я мог бы использовать UITableViewController.

Ответ 5

Попробуйте следующее:

self.navigationController.toolbarHidden = NO;

Надеюсь, это поможет вам.