2016-03-19 3 views
0

У меня есть горизонтальное прокрутка с возможностью разбивки на страницы, поэтому каждая страница будет отображать отдельный вид xib. В некоторых представлениях xib есть кнопки, которые связаны с IBAction. Я объявляю IBAction в каждом классе xib. Все кажется и выглядит хорошо, кнопки показывают эффекты нажатия и все, но IBAction не уволен? Вот пример кода:Кнопки UIViews внутри scrollview не запускаются IBAction

let clockView: ClockViewController = ClockViewController(nibName: "ClockViewController", bundle: nil) 

    let carView: CarViewController = CarViewController(nibName: "CarViewController", bundle: nil) 

    scrollview.addSubview(clockView.view) 

    carView.view.frame.origin.x = self.view.frame.width 

    scrollview.addSubview(carView.view) 

clockView и Carview оба имеют кнопки в них и кнопки связаны с IBActions объявленным в ClockViewController.swift и CarViewController.swift соответственно.

Здесь, как выглядит один из видов. Я не добавляю UIViewController в xib, я использую только UIView. Я предполагаю, что это может быть частью проблемы, но я не могу использовать UIViewController как subview, потому что он дал ошибку. enter image description here

enter image description here

enter image description here Любая помощь приветствуется,

+0

Что такое 'FileOwner'? – Paulw11

+0

fileOwner - это тот же класс xib, и я обновил вопрос, чтобы показать это, спасибо. – fullMoon

+0

Я думаю, ваша проблема в том, что вы помещаете 'CarView' в локальную переменную, чтобы она была выпущена при выходе из функции e. Попробуйте поместить его в переменную экземпляра/свойство – Paulw11

ответ

1

Проблема заключается в том, что вы объявляете carView в качестве локальной переменной, поэтому он будет выпущен только функция выходов, поскольку нет ничего чтобы удержать сильную ссылку. Элементы представления сами ссылаются на scrollview, поэтому они не выпущены, но больше не будет экземпляра контроллера просмотра для обработки событий.

Если вы меняете carView и clockView, чтобы быть объектами недвижимости, тогда будет проведена сильная ссылка.

0

Проблема, кажется, что вы используете ViewControllers внутри ViewControllers. Если вы хотите сделать это через раскадровку, вам придется использовать контейнерView и поместить ViewController в этот контейнерный вид, используя встроенный сегмент, с которым он поставляется.

Если вы хотите сделать это программно, вам нужно будет добавить дочерние контроллеры просмотра в родительский контроллер представлений, который будет охватывать эти дочерние контроллеры просмотра, которые у вас есть, которые являются carView и clockView.

P.S. это немного сбивает с толку, что вы вызываете ваш контроллер представления carView, возможно CarViewController менее запутанным :)

+0

Спасибо, извините за путаницу. Вы правы. Я не могу использовать UIViewController внутри другого UIViewController, и это дало мне ошибку, поэтому я не использую UIViewController в xib, я использую только UIView. – fullMoon

Смежные вопросы