我创建了BaseClassviewController
,我的所有控制器都是从此控制器派生的。我正在执行以下步骤:iOS中的功能覆盖
- 在
BaseClassViewController
中设置自定义代理。 - 执行协议的所有功能
BaseClassViewController
。 - 然后我推
HomeController
派生自BaseClassViewController
。 - 再次我推
DetailController
也衍生自BaseClassViewController
。
现在,当委托函数被调用时,我应该得到在DetailController
控制,但我得到控制在HomeController
。
所以我的问题是为什么它不在导航上调用顶级控制器,例如DetailController
,是否可以在两个控制器中调用委托函数?
P.S我重写了所有子控制器中的委托函数。
编辑:在阅读答案和评论后,我想我没有清楚这么多,所以添加下面的代码片段。
在助手类:
@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()
{
//
}
}
现在我的问题是,当代表从辅助类触发它调用HomeViewController
shouldCallDelegateMethod
但不是在DetailViewController
。但DetailViewController
位于导航数组的顶部。
还有什么可能,我可以触发相同的功能,在两个控制器一次只有委托?
请分享你的声明和覆盖代表的代码片段。 – Aamir
它以相当大的代码显示在这里以建设性的方式。但我想我已经在概念上以体面的方式解释了它。 –
@Aamir如果你需要任何具体的东西让我知道我可以解释。 –