Попытка заказать встроенную UIAnimations, без особого успеха

Хорошо, у меня в приложении для iPhone есть экран, который выглядит следующим образом: пример экрана
(источник: 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];

person mmc    schedule 03.08.2009    source источник
comment
Не могли бы вы опубликовать фрагменты кода, который у вас есть прямо сейчас?   -  person Chu Yeow    schedule 03.08.2009


Ответы (1)


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

- (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];
}
person Amagrammer    schedule 03.08.2009
comment
Просто любопытно - вы использовали viewDidAppear или viewWillAppear? - person Amagrammer; 04.08.2009