2015-09-12 6 views
1

У меня есть VC, который содержит содержимое, содержащее табличный вид. = Root VC является держателем TableviewПротокол делегата Swift не запущен

У меня есть установка делегата от Tableview к корневому VC, который проверяет, если экран время прокручивается вверх или вниз, и это работает.

Теперь я хочу иметь делегат между корнем VC до вид таблицы. При нажатии кнопки в корневом VC я хочу запустить функцию в представлении таблицы.

Это заставит viewcontrollers иметь делегаты, реализованные друг на друге - это проблема?

например: не

class RootVC, tableViewDelegate 
class Tableview, RootVCDelegate 

Мой делегат выглядит следующим образом:

protocol RootVCDelegate: class { 
    func RootVCDidTouchGrid(controller: RootViewController) 
} 

class rootvc { ... 

weak var delegate: RootVCDelegate? 

@IBAction func gridButtonDidTouch(sender: AnyObject) { 
     delegate?.RootVCDidTouchGrid(self) 
    } 

Тогда в табличном:

class tableview, RootVCDelegate {.. 

func RootVCDidTouchGrid(controller: RootViewController) { 
     println("touched!") 
    } 

Так почему никогда println("touched!") уволили?

Благодаря

+0

Глупый вопрос, но делегат имеет значение? – Arsen

+0

@Arsen Я устанавливаю: слабый делегат var: RootVCDelegate? Thats, как я это сделал в других местах, и там работает – user2722667

ответ

0

пожалуйста, определить значение делегата в виде didload:

delegate = self 
+0

У меня: слабый делегат var: RootVCDelegate? Thats, как я это сделал в других vc's, и он работает – user2722667

+0

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

0

Похоже, что вы забыли установить делегат. Просто установите его delegate = self в viewDidLoad

+0

Я: слабый делегат var: RootVCDelegate? Thats, как я это сделал в других vc, и он работает – user2722667

0
  1. Вы создали (слабый) делегат свойство типа RootVCDelegate в вашем RootViewController
  2. Вашего TableView класса соответствует RootVCDelegate
  3. Вы забыли присвоить delegate свойства RootViewController к вашим TableView пример.

Вы упускаете что-то вроде:

class tableview, RootVCDelegate {.. 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     rootViewController.delegate = self 
    } 

    func RootVCDidTouchGrid(controller: RootViewController) { 
     println("touched!") 
    } 
} 
+0

Если я попробую, то он говорит, что rootViewController не имеет имени с именем delegate. Я сделал ту же самую реализацию в других местах, и это работает, это странно – user2722667

+0

Я предполагаю, что это имеет какое-то отношение к представлению таблицы внутри контейнера в RootViewController? В RootViewController я использую segue.gif. == «TableSegue». Могу ли я передать там функцию? – user2722667

+0

Не уверен, что в первом посте ясно, что у rootVC есть член с именем delegate. класс rootvc {... слабый делегат var: RootVCDelegate? ... – fdiaz

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