Подтвердить что ты не робот

Можно ли программно выбрать программный анкер?

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

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

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

Спасибо.

4b9b3361

Ответ 1

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

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

Создайте небольшой вид в раскадровке (размер не имеет значения), сделать его невидимым и связать его. В моем случае это называется 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];
    }
}

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

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

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

dest.popoverPresentationController?.barButtonItem = nil
dest.popoverPresentationController?.sourceView = <your view here>