Как добавить UIToolbar в UITableViewController программно?

#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