Есть ли способ выбрать привязку программы программно? - PullRequest
15 голосов
/ 26 февраля 2012

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

Таким образом, мне нужно установить привязку, перетащив переход к кнопке с помощью Xcode (а затем выполните executeSegueWithIdentifier: ).

Итак, мой вопрос: есть ли способ установить этот «якорь» программно?

Спасибо.

Ответы [ 4 ]

14 голосов
/ 12 января 2013

В моем случае я программно добавил несколько UIBarButtonItem. Проблема использования только невидимого представления в качестве архора заключается в том, что, если, как и в моем случае, размер UIBarButtonItem меняет свой размер, стрелка всплывающего окна не отображается по центру, и хотя это работает, выглядит немного странно. 1001 *

Как это решить.

Создайте небольшое представление в раскадровке (размер на самом деле не имеет значения), сделайте его невидимым и свяжите его. В моем случае это называется invisibleViewAsArchor

Соедините элемент UIBarbutton с помощью следующего действия.

-(IBAction) showMyPopover:(id)sender {
    if([self.popoverController isPopoverVisible])
    {       
        [self.popoverController dismissPopoverAnimated:YES];
    }else{
        self.invisibleViewAsArchor.frame = CGRectMake([sender view].frame.origin.x,
                                                          [sender view].frame.origin.y-50,
                                                          [sender view].frame.size.width,
                                                          [sender view].frame.size.height);

        [self performSegueWithIdentifier:@"segue_to_something" sender:self];
    }
}

как вы можете видеть перед тем, как отобразится всплывающее окно (с executeSegueWithIdentifier), я меняю кадр Archor со значениями от кнопки, которая запустила событие.

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

4 голосов
/ 05 августа 2016

В раскадровке привязать всплывающее окно к какой-нибудь произвольной кнопке. Не беспокойтесь о том, какой из них будет переопределен в коде.

В методе контроллера представления prepareForSegue добавьте код:

let dest = segue.destinationViewController
dest.popoverPresentationController?.barButtonItem = <your bar button here>

или если вы хотите вместо этого привязать вид

dest.popoverPresentationController?.barButtonItem = nil
dest.popoverPresentationController?.sourceView = <your view here>
1 голос
/ 08 сентября 2012

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

1 голос
/ 30 апреля 2012

Вы не можете программно создавать переходы, как описано здесь: Создание перехода программно , однако вы можете настроить, какой контроллер назначения вы хотите отображать во время выполнения. Это объясняется в документации по Apple здесь: Настройка контроллера назначения при запуске перехода .

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

...