#objective-c #modalviewcontroller
#objective-c #modalviewcontroller
Вопрос:
У меня есть этот ViewController с UIButton на нем. Эта кнопка запускает метод, и на его месте должен появиться modalVC. Но по какой-то причине он больше не работает. Я использовал тот же код раньше без каких-либо проблем, но все же это меня беспокоит.
-(void)showModalVC //the method that's being fired by the button.
{
NSLog(@"modalVC to create a table"); //this log is being printed so the button fires as proper.
self.myModalVC = [[MyModalViewController alloc] init]; //a local var gives same results.
self.myModalVC.dismissDelegate = self; //the delegate is handled as proper.
UINavigationController *navController = [[UINavigationController alloc]
initWithRootViewController:self.myModalVC];
//navController.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentModalViewController:navController animated:YES];
[self.myModalVC release];
[navController release];
}
Что может быть причиной того, что modalVC не появляется над моим текущим представлением, откуда бы оно ни вызывалось?
Я использовал этот же метод раньше (в других проектах в других контекстах), поэтому я поражен, что он еще не работает. Метод запускается, и он передает каждую строку кода без сбоев.
Если у вас есть идея. опубликуйте это здесь. Спасибо.
Ответ №1:
Первое, о чем я подумал, это то, что вы создаете пропущенный объект в этой строке:
self.myModalVC = [[MyModalViewController alloc] init];
self. сохранит myModalVC, alloc также сохранит его, и вы, вероятно, освобождаете его только в методе dealloc.
Во всех других средствах код выглядит вполне рабочим. Но, глядя на то, как вы используете self. префикс, может быть, у вас проблема с памятью где-то еще в вашем приложении? Попробуйте прочитать о свойствах и методах доступа.
Комментарии:
1. Спасибо за ваш вклад. Однако это не проблема с памятью. Выделение, которое я освобождаю в конце функции, и свойство в методе dealloc моего класса. И поскольку у меня нет двойных бесплатных сбоев или утечек, я думаю, что я в безопасности.
Ответ №2:
-(void)showModalVC
{
self.myModalVC = [[ModalVC alloc] init];
self.myModalVC.dismissDelegate = self;
UINavigationController *navController = [[UINavigationController alloc]
initWithRootViewController:self.myModalVC];
navController.modalPresentationStyle = UIModalPresentationFormSheet; //or something similar, this one is used on an iPad
UILabel *navTopItemTitle = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 44)];
navTopItemTitle.text = @"Modal shizzle";
navTopItemTitle.backgroundColor = [UIColor clearColor];
navTopItemTitle.textColor = [UIColor whiteColor];
navTopItemTitle.textAlignment = UITextAlignmentCenter;
[navController.navigationBar.topItem setTitleView:navTopItemTitle];
[self presentModalViewController:navController animated:YES];
[self.addTabViewController release];
[navController release];
}
Проблема решена.