отображать всплывающее окно, когда пользователь нажимает в текстовое поле? - PullRequest
4 голосов
/ 24 февраля 2011

Привет, я читал книгу о том, как отображать всплывающее окно, когда пользователь нажимает на кнопку на панели инструментов.Это работает нормально, но я хочу отобразить всплывающее окно, когда пользователь щелкает в текстовое поле.Кажется, что это будет небольшая корректировка.Как изменение метода IBAction "showPopover" немного.Вот как выглядит код для этого метода:

- (IBAction)showPopover:(id)sender{

    if(popoverController == nil){   //make sure popover isn't displayed more than once in the view
        popoverController = [[UIPopoverController alloc]initWithContentViewController:popoverDetailContent]; 

    [popoverController presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    popoverController.delegate = self;
    }
}

Существует другой метод экземпляра, отличный от «presentPopoverFromBarItem», который называется «presentPopoverFromRect». Могу ли я использовать его вместо этого?Я пытался написать код для него, но я не уверен, как связать его с моим TextField или как нарисовать прямоугольник. Может кто-нибудь помочь мне с этим? Спасибо.

Ответы [ 4 ]

10 голосов
/ 24 февраля 2011

вы должны использовать метод делегата textfields textViewShouldBeginEditing:

Примерно так:

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView {
    if(popoverController == nil){   //make sure popover isn't displayed more than once in the view
        popoverController = [[UIPopoverController alloc]initWithContentViewController:popoverDetailContent]; 
    }
    [popoverController presentPopoverFromRect:textView.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    popoverController.delegate = self;
    return NO; // tells the textfield not to start its own editing process (ie show the keyboard)
}
8 голосов
/ 13 ноября 2012

Для тех, кто хочет отображать всплывающее окно, но не хочет отображать клавиатуру при нажатии текстового поля, вот решение, которое я всегда использовал (обратите внимание, что это отличается от предыдущих ответов textFieldShouldBeginEditing ):

/*
 *  Handle when text field is about to start edit mode
 */
- (BOOL)textFieldShouldBeginEditing:(UITextField *) textField
{
  // Create popover controller if nil
  [self.myPopover presentPopoverFromRect:textField.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
  return NO;
}

Надеюсь, это поможет!

1 голос
/ 02 августа 2013

если ваш textField находится внутри ячейки таблицы, ваш поповер будет указывать на верхнюю часть экрана, потому что фрейм фрейма textField ссылается на представление, содержащее текстовое поле. Таким образом, вы должны дать ему правильное представление ссылки. Вы должны использовать textField.superview в качестве ссылки на представление.

- (BOOL)textFieldShouldBeginEditing:(UITextField *) textField
{
    ...
    [self.myPopover presentPopoverFromRect:textField.frame inView:textField.superview permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    return NO;
}
1 голос
/ 24 февраля 2011

Да, существует метод presentPopoverFromRect .

Чтобы подключить его к UITextField, вам потребуется реализовать UITextFieldDelegate и вызвать свой код showPopover из textFieldDidBeginEditing method.

Прямоугольник, который вы используете, должен быть прямоугольником TextField.

...