#iphone #uiview #uiviewcontroller #subview
#iPhone #uiview #uiviewcontroller #вложенный просмотр
Вопрос:
Эй, ребята, у меня есть UIViewController, RootUIViewController, ссылающийся на другой UIViewController, MainMenuViewController.
Я добавляю представление MainMenuViewController в качестве подвида к представлению RootUIViewController. Проблема в том, что события касания не перехватываются в методе MainMenuViewController touchesBegan.
Соответствующий код приведен ниже. Вывод при касании экрана показывает «прикосновение к корневому контроллеру просмотра». Желаемый результат, который я хочу, — это событие касания, которое должно быть зафиксировано в MainMenuViewController и отображать «прикосновение к контроллеру корневого представления». Что я здесь упускаю / делаю неправильно?
RootUIViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
MainMenuViewController* mainMenuViewController = [[MainMenuViewController alloc] initWithNibName:@"MainMenuView" bundle:nil];
m_mainMenuViewController = mainMenuViewController;
[self.view addSubview:m_mainMenuViewController.view];
[mainMenuViewController release];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"touched at root view controller");
}
MainMenuViewController.m
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"touched at main view controller");
}
Комментарии:
1. Что именно вы пытаетесь сделать?
2. Приведенный здесь код выглядит нормально. Проверьте, установлен ли для
userInteractionEnabled
ofm_mainMenuViewController.view
значениеNO
.3. @rptwsthi Моя цель — когда я касаюсь представления (m_mainMenuViewController.view), событие будет перехвачено методом m_mainMenuViewController touchesBegan. @Deepak спасибо, я попробую
Ответ №1:
Рад, что вы смогли решить проблему с управлением памятью. Я хочу добавить предупреждение о том, что
[self.view addSubview:m_mainMenuViewController.view];
это проблематично и, на мой взгляд, плохая идея. Вложенные просмотры представления UIViewController не должны управляться их собственным UIViewController. У этих вложенных представлений могут быть контроллеры, но они не должны быть подклассами UIViewController, потому что они никогда не будут надежно вести себя точно так, как вы могли бы ожидать от UIViewController, и это, вероятно, вызовет у вас головную боль позже. Лучше принять ограничения классов и API, которые мы получаем от Apple, и разработать поддерживаемое надежное решение.
Я попытался подробно описать это здесь: Злоупотребление UIViewControllers, надеюсь, это поможет.