Попытка заказать встроенные UIAnimations, не имея большого успеха - PullRequest
1 голос
/ 03 августа 2009

ОК, в моем приложении для iPhone есть экран, который выглядит следующим образом: sample screen
(источник: matthewcave.com )

При касании ячейки «Добавить заметки» я хотел бы, чтобы клавиатура исчезла, ТОГДА я бы хотел, чтобы он модально отображал экран «Редактировать заметки» (который также имеет клавиатуру, но я хотел бы, чтобы он анимировал обратно на экран ).

Прямо сейчас он анимирует все сразу (клавиатура никогда не исчезает, она просто меняет свой внешний вид, а новый вид модально оживляется, по-видимому, под клавиатурой). Весь эффект работает должным образом, но он немного прерывистый, и я думаю, что сдвинуть клавиатуру до появления модального вида на экране было бы более плавным. Я видел, как другие приложения делают то, что я хочу (вещи, например), поэтому я знаю, что это возможно.

Может ли кто-нибудь указать мне правильное направление, чтобы каждый из переходов происходил индивидуально, а не все сразу?

Редактировать: В соответствии с просьбой, вот часть кода, который я использую. К сожалению, в Objective C он читается почти так же, как и на английском.

  UITableViewController* tableViewController = (UITableViewController*)tableView.dataSource;

  AddNotesViewController* addNotesViewController = [[AddNotesViewController alloc] initWithWine:[self myWine]];

  UINavigationController* addNotesNavController = [[[UINavigationController alloc] initWithRootViewController:addNotesViewController] autorelease];

  // tell the name override cell to resign if they need to
  [(NewWineViewController*)tableView.dataSource resignNameCell];

  //I'd like the animation caused by the resign to complete before proceeding.

  [tableViewController.navigationController presentModalViewController:addNotesNavController animated:YES];

1 Ответ

3 голосов
/ 03 августа 2009

Я думаю это должно работать:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    UITextField *textField = // the field that the keyboard is up for
    [textField resignFirstResponder];

    NSTimeInterval delay = 2.0; // i.e., until keyboard has disappeared
    [self performSelector: @selector(transitionToEditNotesScreen) withObject: nil afterDelay: delay];
}

- (void) transitionToEditNotesScreen
{
    // the code you have above to bring on the modal view controller        
}

Добавьте следующий код в контроллер для экрана редактирования заметок. Если вы хотите, чтобы клавиатура снова оживлялась после того, как модальное представление полностью появилось, поместите ее в viewDidAppear. В противном случае поместите один и тот же код в viewDidLoad или viewWillAppear.

- (void) viewDidAppear: (BOOL) animated
{
    UITextField *textField = // the field you want the keyboard to be up for
    [textField becomeFirstResponder];
}
...