2016-03-07 3 views
0

Мне было интересно, как написать протокол для передачи данных обратно в UITableViewController? Если я напишу обычный протокол, как можно было бы написать для UIViewController, я получаю сообщение об ошибке «Тип» TableViewController «не соответствует типу протокола« PresentedViewControllerDelegate ».»Как написать протокол для передачи данных обратно в UITableViewController?

Спасибо за любую помощь!

+0

Попробуйте использовать NSNotificatonObserver. –

+0

@BharatModi: это определенно был бы неправильный путь. Просто перебор. – vikingosegundo

ответ

0

Создайте свой протокол и подтвердите свой подклассу UITableViewController для протокола, который вы создали. Внесите необходимые методы и свойства в свой контроллер, и вы хорошо пойдете.

Ex:

protocol YourProtocol 
{ 
    func method1(par1: String, par2: Int) 
} 

class YourTableViewController: UITableViewController, YourProtocol 
{ 
    //MARK:- YourProtocol Methods 
    func method1(par1: String, par2: Int) 
    { 
     //Receive your data through this method 
     //And Do your thing here 
    } 
} 
+0

«UITableViewController подтверждает протокол, который вы создали», как это сделать? D: – Ekolu

+0

@Ekolu Просто ваш подкласс UITableViewController реализует необходимые методы протокола. –

0

Ваш TableViewController не реализованы функции, объявленные в протоколе PresentedViewControllerDelegate. Внедрите эти функции, и все будет в порядке.

protocol PresentedViewControllerDelegate { 
    func somefunction(parameter: String) 
    func anotherfunction() 
} 

class Table: UITableViewController, PresentedViewControllerDelegate { 
    func somefunction(parameter: String) { 

    } 
    func anotherfunction() { 

    } 
} 
+0

Спасибо, ты совершенно прав! – Ekolu

1

только протокол не является достаточным, вам нужно также delegate

  • Объявить свой протокол:

    protocol PresentedViewControllerDelegate { 
        func method1(data:[String:AnyObject]) 
        func method2(controller:PresentedViewController) 
    } 
    

    В первом методе вы передаете пользовательский объект (Dictionary),
    во втором методе сам контроллер назначения.

  • В назначения контроллера представленияPresentedViewController (отправитель) создать свойство делегата:

    weak var delegate : PresentedViewControllerDelegate? 
    

    и добавить код для вызова методов

    delegate?.method1(someDictionary) 
    
    delegate?.method2(self) 
    

    Опциональный сцепление очень удобно, методы не вызывают, если делегат nil.

  • В контроллере просмотреть исходный (приемник) добавить PresentedViewControllerDelegate к декларации линии, реализовать необходимые методы протокола и добавить строку в prepareForSegue, чтобы установить делегат.

    let destinationController = segue.destinationController as! PresentedViewController 
    destinationController.delegate = self 
    
Смежные вопросы