Я создал BaseClassviewController
, и все мои контроллеры получены от этого контроллера. Я делаю следующие шаги:Функция переопределения в iOS
- Установить пользовательский делегат в
BaseClassViewController
. - Реализовать всю функцию протокола в
BaseClassViewController
. - Затем я нажимаю
HomeController
, полученный отBaseClassViewController
. - Снова я толкаю
DetailController
также полученный изBaseClassViewController
.
Теперь, когда функция делегат называется я должен получить контроль в DetailController
, но я получаю контроль в HomeController
.
Итак, мой вопрос в том, почему его не вызывающий верхний контроллер при навигации i.e DetailController
и можно ли вызвать функции делегата в обоих контроллерах?
P.S Я переопределяю функции делегата во всех дочерних контроллерах.
EDIT: После прочтения ответов и комментариев, я думаю, что я не был настолько ясен, поэтому добавлял следующий фрагмент кода.
В Helper Класс:
@objc protocol SampleDelegate: class
{
@objc optional func shouldCallDelegateMethod()
}
class SampleHelper: NSObject
{
var sampleDelegate:SampleDelegate!
static var sharedInstance = SampleHelper()
//It is triggered
func triggerDelegateMethod()
{
sampleDelegate!.shouldCallDelegateMethod()
}
func apiCall()
{
let urlString = URL(string: "https://google.com")
if let url = urlString {
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
if error != nil {
print(error)
} else {
if let usableData = data {
self. triggerDelegateMethod()
}
}
}
task.resume()
}
}
}
В BaseClass
class BaseClassViewController: UIViewController,SampleDelegate{
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(_ animated: Bool)
{
super.viewWillAppear(true)
SampleHelper.sharedInstance.delegate = self;
}
func shouldCallDelegateMethod()
{
//Override
}
}
В HomeController то есть первый контроллер для толкания
class HomeViewController: BaseClassViewController{
override func shouldCallDelegateMethod()
{
//
}
}
В DetailController т.е. второй контроллер выталкивается после HomeController от HomeController ,
class DetailViewController: BaseClassViewController{
override func viewDidLoad()
{
super.viewDidLoad()
SampleHelper.sharedInstance.apiCall()
}
override func shouldCallDelegateMethod()
{
//
}
}
Теперь мой вопрос, когда делегат вызывается из вспомогательного класса он называет shouldCallDelegateMethod
в HomeViewController
, но не в DetailViewController
. Но DetailViewController
находится в верхней части навигационного массива.
Также есть ли возможность запускать одну и ту же функцию в обоих контроллерах одновременно с делегатом?
Пожалуйста, поделитесь своим фрагментом кода объявления и переопределения делегатов. – Aamir
Его довольно большой код, чтобы показать здесь конструктивным способом. Но я думаю, что я объяснил это достойным образом концептуально .. –
@Aamir Если вам нужно что-нибудь конкретное, дайте мне знать, я могу объяснить. –