#iphone #ios #uitableview #uitoolbar
#iPhone #iOS #uitableview #uitoolbar
Вопрос:
Я решил использовать UITableViewController
без указателя. Мне нужна UIToolbar внизу с двумя кнопками. Какой самый простой способ сделать это?
PS Я знаю, что могу легко использовать UIViewController
и добавлять UITableView
, однако я хочу, чтобы все выглядело согласованно во всем приложении.
Кто-нибудь может помочь?
Я видел следующий пример, и я не уверен в его достоверности:
(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
//Initialize the toolbar
toolbar = [[UIToolbar alloc] init]; toolbar.barStyle = UIBarStyleDefault;
//Set the toolbar to fit the width of the app.
[toolbar sizeToFit];
//Caclulate the height of the toolbar
CGFloat toolbarHeight = [toolbar frame].size.height;
//Get the bounds of the parent view
CGRect rootViewBounds = self.parentViewController.view.bounds;
//Get the height of the parent view.
CGFloat rootViewHeight = CGRectGetHeight(rootViewBounds);
//Get the width of the parent view,
CGFloat rootViewWidth = CGRectGetWidth(rootViewBounds);
//Create a rectangle for the toolbar
CGRect rectArea = CGRectMake(0, rootViewHeight - toolbarHeight, rootViewWidth, toolbarHeight);
//Reposition and resize the receiver
[toolbar setFrame:rectArea];
//Create a button
UIBarButtonItem *infoButton = [[UIBarButtonItem alloc] initWithTitle:@"back"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(info_clicked:)];
[toolbar setItems:[NSArray arrayWithObjects:infoButton,nil]];
//Add the toolbar as a subview to the navigation controller.
[self.navigationController.view addSubview:toolbar];
[[self tableView] reloadData];
}
(void) info_clicked:(id)sender {
[self.navigationController popViewControllerAnimated:YES];
[toolbar removeFromSuperview];
}
Комментарии:
1. Необходимо указать, что наиболее важной строкой здесь является [размер панели инструментов]; без этого панель инструментов отображается, но не принимает никаких пользовательских взаимодействий
Ответ №1:
Проще всего создать свой проект поверх UINavigationController
. У него уже есть панель инструментов, она просто скрыта по умолчанию. Вы можете открыть его, переключив toolbarHidden
свойство, и ваш контроллер табличного представления сможет использовать его, пока он находится в иерархии контроллеров навигации.
В делегате вашего приложения или в объекте, которому делегат вашего приложения передает управление, создайте навигационный контроллер с вашим UITableViewController
в качестве корневого контроллера представления:
- ( void )application: (UIApplication *)application
didFinishLaunchingWithOptions: (NSDictionary *)options
{
MyTableViewController *tableViewController;
UINavigationController *navController;
tableViewController = [[ MyTableViewController alloc ]
initWithStyle: UITableViewStylePlain ];
navController = [[ UINavigationController alloc ]
initWithRootViewController: tableViewController ];
[ tableViewController release ];
/* ensure that the toolbar is visible */
navController.toolbarHidden = NO;
self.navigationController = navController;
[ navController release ];
[ self.window addSubview: self.navigationController.view ];
[ self.window makeKeyAndVisible ];
}
Затем установите элементы панели инструментов в вашем MyTableViewController
объекте:
- ( void )viewDidLoad
{
UIBarButtonItem *buttonItem;
buttonItem = [[ UIBarButtonItem alloc ] initWithTitle: @"Back"
style: UIBarButtonItemStyleBordered
target: self
action: @selector( goBack: ) ];
self.toolbarItems = [ NSArray arrayWithObject: buttonItem ];
[ buttonItem release ];
/* ... additional setup ... */
}
Комментарии:
1. Это потрясающий совет. Я никогда не знал, что UINavigationController имеет панель инструментов, которая по умолчанию скрыта. Я уже использовал его, так что это был настоящий бонус. Также спасибо, что нашли время, чтобы действительно все объяснить.
Ответ №2:
Вы также можете просто проверить опцию «показывает панель инструментов» в инспекторе атрибутов NavigationController.
Комментарии:
1. Но затем он включается во всех представлениях, что в любом случае приводит к использованию кода в тех представлениях, где панель инструментов не должна использоваться.
Ответ №3:
Вот простой пример, который может помочь
UIBarButtonItem *spaceItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *trashItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:self action:@selector(deleteMessages)];
UIBarButtonItem *composeItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose target:self action:@selector(composeMail)];
NSArray *toolbarItems = [NSMutableArray arrayWithObjects:spaceItem, trashItem,spaceItem,composeItem,nil];
self.navigationController.toolbarHidden = NO;
[self setToolbarItems:toolbarItems];
Спасибо,
prodeveloper