PresentModalViewController из ViewController, вложенного в UIScrollview?

Я создаю приложение для iPhone, и у меня возникла проблема с запуском кода для presentModalViewController из viewController, который вложен в Scrollview, когда я нажимаю кнопку, чтобы представить следующий контроллер представления, я получаю медленную анимацию и пустой экран в течение двух секунд.

Из моего AppDelegate я устанавливаю rootViewController в свой ViewController (который содержит код для установки моего макета прокрутки)

Я в основном загружаю два контроллера представления внутри прокрутки, чтобы пользователь мог опустить экран, чтобы увидеть историю.

AppDelegateCode

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

[application setStatusBarStyle:UIStatusBarStyleBlackOpaque];  

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
ViewController *controller =  [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
self.window.rootViewController = controller; //self.viewController;
[self.window makeKeyAndVisible];
return YES;

}

Код ViewController

- (void)viewWillAppear:(BOOL)animated

{[super viewWillAppear:анимированный];

CGRect bounds = self.view.bounds;

vScroller.bounces = NO;
vScroller.pagingEnabled = YES;
vScroller.showsVerticalScrollIndicator = FALSE;
vScroller.alwaysBounceVertical = FALSE;

vScroller.contentSize = CGSizeMake(bounds.size.width, bounds.size.height * 2);

// History View Controller..
historyViewController *historyView = [[historyViewController alloc] initWithNibName:@"historyViewController" bundle:nil];

[vScroller addSubview:historyView.view];
[historyView release];

// Reconfigure Content Offset
vScroller.contentOffset = CGPointMake(0, bounds.size.height);

// Calculator View Controller
mainCalculatorViewController *mainView = [[mainCalculatorViewController alloc] initWithNibName:@"mainCalculatorViewController" bundle:nil];
mainView.view.frame = CGRectOffset(bounds, 0, bounds.size.height);
[vScroller addSubview:mainView.view];

}

Код кнопки информации mainCalculatorViewController

  - (IBAction)btnInfo:(id)sender 
    {
        infoViewController *controller = [[infoViewController alloc] initWithNibName:@"infoViewController" bundle:nil];

        controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        [self presentModalViewController:controller animated:YES];
        [controller release];
    }

Проблема в том, что при нажатии кнопки информации я получаю плохую анимацию, мне кажется, что, возможно, кнопка и PresentModal View Controller должны запускаться из родительского ViewController, который содержит вложенные прокрутки, но я не уверен, как это сделать.

Любые советы или предложения были бы замечательными.

Спасибо, Аарон.


person MonkeyBlue    schedule 27.01.2012    source источник


Ответы (1)


Прежде всего, я не знаю, как это делает конструктор интерфейсов. Но программно вы, вероятно, захотите создать новый navigationController для обработки modalVC.

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

Вот как я работаю с ModalVC.

Я надеюсь, что это полезно для вас.

Удачи.

person Totumus Maximus    schedule 27.01.2012
comment
Спасибо за код, я попробовал это, но я все еще получаю черный экран при нажатии кнопки информации, это определенно связано с контроллером представления, и его кнопка вложена в прокрутку, которая находится на другом контроллере представления:/ - person MonkeyBlue; 27.01.2012
comment
Ну, черный экран — это то, что вы делаете внутри своего модального VC. Информация там может и должна быть установлена ​​в свойствах МЕЖДУ alloc modalVC и presentModalVC. Или в loadView самого модального VC. То, что вы получаете черный экран, больше не является настоящей проблемой ModalVC, а в основном является ошибкой в ​​настройке представления вашего ModalVC. - person Totumus Maximus; 27.01.2012
comment
хм, я не уверен, что это такое, ваш код отлично работает с точки зрения отображения контроллера представления информации, но из начального представления, когда я нажимаю кнопку информации, экран становится черным на 2 секунды, затем показывает представление информации, анимация перехода также делает тоже не играй. - person MonkeyBlue; 27.01.2012
comment
Это кажется другим вопросом. Я предлагаю обновить вопрос и добавить код того, как вы показываете свой modalVC, или создать новый вопрос вместе. Однако кажется, что вы установили данные после того, как загрузили свой modalVC и после метода viewDidAppear:-, что означает, что вы загрузили данные в тот момент, когда представление уже находится на экране. - person Totumus Maximus; 27.01.2012
comment
Спасибо за вашу помощь, я обновил вопрос и опубликовал код из AppDelegate, ViewController и mainCalculatorViewController, где находится моя кнопка. - person MonkeyBlue; 27.01.2012