2014-11-10 4 views
0

Я ищу наилучший способ инициировать родительский метод из контроллера представления ребенка.инициировать родительский метод из дочернего представления SWIFT

Родитель - это вид прокрутки с тремя дочерними дочерними элементами UIViewController. Код для их инициализации и присоединения отлично работает ... просто не представляется возможным найти способ вызова методов родителя.

благодарит заранее!

+0

Просто уточнение терминологии. Вы «вызываете» метод, вы его не «инициируете». Вы «инициализируете» тип для создания новых экземпляров этого типа. Кроме того, представления могут иметь «subviews» и «superviews», но обычно не называются детьми. У контроллеров View могут быть контроллеры дочерних представлений и контроллеры родительских представлений. Единственная связь между представлениями и контроллерами представлений состоит в том, что каждый контроллер представления имеет представление. Вид ничего не знает о контроллере представления. Таким образом, только потому, что одно представление содержит другие представления, не означает, что между контроллерами представлений есть какая-либо связь. – drewag

+0

В порядке я вижу, что вы говорите. Таким образом, возможно ли, чтобы представление вызывало метод его супервизора, даже несмотря на то, что subview не знает, что это контроллер просмотра? –

+0

Каждое представление имеет ссылку на его супервизор через его свойство 'superiew', чтобы оно могло вызывать методы в своем супервизоре. – drewag

ответ

2

Общий способ вызова (общественные/внутренние) метод родителя от ребенка или другого класса целиком является сохранить ссылку на родитель у ребенка

class parent { 
    ... 

    internal func doSomething() { 
     println("Did something...") 
    } 
} 

class child { 
    let pReference: parent 

    init(p: parent) { 
     self.pReference = p 
    } 

    internal func callInParent() { 
     self.pReference.doSomething() 
    } 
} 

let x = parent() 
let y = child(x) 
y.callInParent() // prints "Did something..." 

Это легко практиковать внутри детская площадка. Попробуй.

+0

все проверено отлично. Наконец, я смог полностью инициализировать все свои взгляды без особых проблем. Я только что решил проблему, я заметил, что у вашего кода была синтаксическая ошибка (возможно, вы сделали это специально для проверки меня! Hahah), и я заменил p.doSomething() на pReference.doSomething(), и что вы знаете, все работает идеально. Честно говоря, я так много спал, пытаясь понять это. ваш реальный спасатель! спасибо кучу за то, что помогли мне! –

+0

Хотя мне интересно, это первый раз, когда я видел «внутреннюю» функциональность ... что это? –

+0

Извините, исправлена ​​ошибка синтаксиса. «Внутренняя» часть является модификатором доступа, см. Https://developer.apple.com/library/ios/documentation/swift/conceptual/Swift_Programming_Language/AccessControl.html. – jonogilmour

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