#ios #uitableview
#iOS #uitableview
Вопрос:
Почему верхний и нижний колонтитулы tableview всегда остаются на вершине иерархии представлений, но не ячейки таблицы?
Вот что я получил:
- Представление таблицы с пользовательскими ячейками, нижним колонтитулом и заголовком
- Панель навигации с кнопкой меню справа
- Когда пользователь нажимает кнопку меню, полупрозрачное меню (UIView) исчезает сверху, но не над панелью навигации, а только над представлением моего tableviewcontroller
- Когда пользователь нажимает кнопку меню, меню возвращается к (0, -menuHeight)
- Но когда меню находится над заголовком, эта область меню находится за моим заголовком
Я привязал меню к представлению моего tableviewcontroller, потому что я хочу, чтобы панель навигации всегда была видна. решение привязать его к панели навигации решает проблему с представлением верхнего и нижнего колонтитулов, но охватывает панель навигации.
У кого-нибудь есть идея, как решить эту проблему? Почему ячейки нарисованы правильно?
Ответ №1:
Вероятно, вам не следует напрямую вмешиваться во внутреннюю иерархию представлений UITableView
. Apple может свободно упорядочивать подвиды табличного представления по своему усмотрению (и изменять его в будущих выпусках).
Вместо этого поместите представление таблицы и ваше меню в общий вид контейнера и сделайте последний основным видом вашего контроллера представления. Таким образом, вы можете быть уверены, что ваш вид меню всегда будет находиться над видом таблицы.
Комментарии:
1. Хорошо — я изменил свой дизайн — но теперь я не получаю события касания в своей таблице. -> пожалуйста, смотрите мой новый ответ ниже
2. Вы не должны добавлять ответ, содержащий вопрос. Вместо этого отредактируйте свой первоначальный вопрос. Я также не считаю хорошей идеей сбрасывать self.TableView в другое представление. AFAIK, свойство TableView UITableViewController просто возвращает свой выход для просмотра по умолчанию. Другими словами, больше не используйте UITableViewController. Вместо этого используйте обычный UIViewController.
3. Хорошо — вы имеете в виду, что я должен создать новый ViewController и добавить в него представление tableviewcontrollers?
Ответ №2:
Я изменил свой дизайн, но теперь я не получаю события касания в своей таблице.
Но когда я добавляю этот метод — я вижу, что я касаюсь tableviewcontroller…
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"ShieldingViewController received touch");
[self.buttonMenu shieldingViewTouched];
}
Вот что я изменил:
- (void)viewDidLoad
{
[super viewDidLoad];
CGRect viewFrame = self.view.frame;
viewFrame.origin.y = 0;
UIView *rootView = [[UIView alloc] initWithFrame:viewFrame];
rootView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
// Setup the table view
UITableView *newTableView = [[UITableView alloc] initWithFrame:viewFrame style:self.tableView.style];
newTableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
newTableView.backgroundColor = [UIColor darkGrayColor];
UIView *menuLayerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)];
self.tableView = newTableView;
[rootView addSubview:self.tableView];
[rootView addSubview: menuLayerView];
self.view = rootView;
[[CustomNavigationController instance] setCurrentViewForMenu: menuLayerView];
[[CustomNavigationController instance] showMenuInNavigationBarForController:self];
[newTableView release];
[menuLayerView release];
[rootView release];
}