Ios 嵌套委托/在委托中实现viewDidLoad()
我目前正在处理一个项目,该项目要求我使用委托将变量(已在委托中)传递到另一个视图控制器 我有一个名为Ios 嵌套委托/在委托中实现viewDidLoad(),ios,swift,delegates,Ios,Swift,Delegates,我目前正在处理一个项目,该项目要求我使用委托将变量(已在委托中)传递到另一个视图控制器 我有一个名为MyTableView的TableView,它实现了一个名为MyCell的自定义类来布局各个单元格 class MyTableViewController: UITableViewController { override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { if
MyTableView
的TableView
,它实现了一个名为MyCell的自定义类来布局各个单元格
class MyTableViewController: UITableViewController {
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if indexPath.row == 4 {
let answerViewController = AnswerViewController()
navigationController?.pushViewController(answerViewController, animated: true)
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
var items = ["Item 1","Item 2","Item 3","Item 4"]
let cell1: MyCell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath) as! MyCell
return cell1
}
}
前面提到的MyCell
类有一个包含委托的扩展。在这个委托中有一个名为tagToIndex
的变量,我想将它传递给名为AnswerViewController
extension MyCell: YSSegmentedControlDelegate{
func segmentedControl(_ segmentedControl: YSSegmentedControl, willPressItemAt index: Int) {
//Modifying Variable Tag To Index
tagToIndex[actionButton.tag] = index
//Passing Variable to Delegate
delegate?.finishPassing(dictionary: tagToIndex)
}
}
视图的设置方式取决于tagToIndex
值,因此我想在代理中实现viewDidLoad
功能。一旦满足tagToIndex
条件(未显示if-else语句),我将在委托函数中使用一系列if-else语句以某种方式设置视图
class AnswerViewController:UIViewController,TagToIndexDelegate{
//访问通过委托传递的变量tagToIndex
func finishPassing(字典:字典){
func viewDidLoad(){
super.viewDidLoad()
视图?.backgroundColor=UIColor(白色:240.0/255.0,alpha:1)
}
}
我还创建了协议tagToIndexDelegate
,但我认为没有必要在这里发布。我有两个问题:
- 在哪里设置目的地的委托(即在哪里放置
)foo.delegate=self
- 我可以在这样的委托中实现
吗?如果可以,这是正确的做法吗viewDidLoad()
foo.delegate=self
)
我可以在这样的委托中实现viewDidLoad()
吗?如果可以,这是正确的做法吗
很抱歉,您无法在委托中实现viewDidLoad()
,因为它从未执行过。
viewDidLoad
或视图将出现
,它们将在用户看到视图之前执行
这是正确的方法
class AnswerViewController: UIViewController, TagToIndexDelegate {
// Accessing the variable tagToIndex passed through the delegate
func finishPassing(dictionary: Dictionary<Int, Int>) {
//background view automatic change don't worry about that
view?.backgroundColor = UIColor(white: 240.0/255.0, alpha: 1)
}
class AnswerViewController:UIViewController,TagToIndexDelegate{
//访问通过委托传递的变量tagToIndex
func finishPassing(字典:字典){
//背景视图自动更改不用担心
视图?.backgroundColor=UIColor(白色:240.0/255.0,alpha:1)
}
为什么要在代理中实现viewDidLoad
功能。这样做的好处是什么?在没有viewDidLoad
功能的情况下实现finishPassing
有什么区别吗?我们试图实现什么。我们可以向您建议简单的方法,而不是您正在使用的复杂方法使用。tagToIndex
跟踪一系列分段控件。answerViewController
将根据这些分段控件的状态而不同(因此,tagToIndex
)。这本质上是一个问答应用程序,因此有一个带有UILabel和一个“是”或“否”的tableView
控制器每行“否”分段控件。当用户按特定顺序选择分段控件时,应用程序将进入answerViewController
,谁的布局取决于回答了哪些问题“是”或“否”"我和某人简要地讨论了这一点,它似乎是正确的。问题是,当我尝试实现它时,Xcode将cell1.delegate=self
更正为cell1.delegate=self as!TagToIndexDelegate
。我不确定它为什么会向下转换,但不管是什么原因,它似乎都会阻止代理正常工作。@indiankid97您如何在cell中声明delegate
您是指我的cellForRowAt
函数是什么样子的吗?不!我只是问您如何在MyCell
中声明delegate
?在MyCell类中,我创建了一个类型为TagToIndexDelegate
的委托变量:var delegate:TagToIndexDelegate?
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
var items = ["Item 1","Item 2","Item 3","Item 4"]
let cell1: MyCell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath) as! MyCell
//set the destination's delegate
cell1.delegate = self
return cell1
}
}
class AnswerViewController: UIViewController, TagToIndexDelegate {
// Accessing the variable tagToIndex passed through the delegate
func finishPassing(dictionary: Dictionary<Int, Int>) {
//background view automatic change don't worry about that
view?.backgroundColor = UIColor(white: 240.0/255.0, alpha: 1)
}