Скрытие UIToolBar для дочерних представлений UITableViewController - PullRequest
1 голос
/ 19 июня 2009

Мой основной контроллер - это подкласс UITableViewController с UIToolBar внизу, и когда выбрана строка, я бы хотел отобразить другой вид без панели инструментов. Как я могу скрыть UIToolBar в дочернем представлении? Прямо сейчас он присутствует во всех дочерних представлениях, если они не созданы как модальные.

Панель инструментов создана в RootController:

self.toolbar = [[UIToolbar alloc] init];
// add tool bar items here
[self.navigationController.view addSubview:toolbar];

RootController отображает дочерние представления следующим образом:

UIViewController *controller = [[UIViewController alloc] init...]
[self.navigationController pushViewController:controller animated:YES];

RootController создается как таковой в applicationDidFinishLaunching приложения-делегата:

RootController *rootcontroller = [[RootController alloc] initWithStyle:UITableViewStyleGrouped];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:rootcontroller];

[rootcontroller release];

[window addSubview:[self.navigationController view]];

Если я добавлю панель инструментов в [self.view] в RootController вместо представления navigationController, панель инструментов полностью исчезнет ..

Ответы [ 3 ]

2 голосов
/ 19 июня 2009

Вы можете попытаться скрыть панель инструментов, прежде чем отобразить наше дочернее представление с помощью 'toolbar.hidden = YES', а затем в своем методе viewWillAppear показать его снова с помощью 'toolbar.hidden = NO'.

0 голосов
/ 09 апреля 2010

Я получил это работает с этим

[toolbar removeFromSuperview];

Проверьте это

- (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];

}
0 голосов
/ 09 декабря 2009

Другая альтернатива будет использовать "removeFromSuperview"

[панель инструментов removeFromSuperview];

Затем используйте метод viewDidAppear в представлении, где вы хотите повторно показать панель инструментов. Он работает лучше, чем viewWillAppear, так как панель инструментов добавляется после отображения представления. (Для viewWillAppear панель инструментов добавляется во время перехода, поэтому она немного неловкая.)

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