没有segue,@ IBaction swift将数据传递给上一个视图

当我点击文本框时,我有一个View1我要去view2(表视图)来选择一个值 . 我想将拾取的值发送到该文本框的view1 .

控件是以编程方式创建的,所以我没有使用segue,IBActions .

我试图使用协议方法仍然没有成功 . 这是我尝试过的 .

class DynamicSuperView: UIViewController,UITableViewDelegate,UITableViewDataSource,dropdownDelegate,UITextFieldDelegate
{

 func setValue(value:AnyObject)
 {
  print("dynamic view delegate method executed")
    self.labelText =  value as! String
    //return selectedValue;
  }

override func viewDidLoad() {

}
}

第二类在这里使用委托方法..

protocol dropdownDelegate {
  func setValue(value: AnyObject);
}


class testClass: UIViewController,UITableViewDataSource,UITableViewDelegate,UISearchBarDelegate {
  var delegate:dropdownDelegate! = nil

  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let vcName = names[indexPath.row]
    print ("Table view cell clicked and value passed: \(vcName)")

    if let cell = tableView.cellForRow(at: indexPath) {
        cell.accessoryType = .checkmark

    }

    self.navigationController?.popViewController(animated: true)

    delegate.setValue(value: "Testing delegate")

}

}

一旦我在tableview中选择了值,我就会调用委托方法并尝试传递该值,但没有成功 .

我不想创建前一个视图控制器的新实例,因为我将丢失用户已输入的数据,因此我弹出当前视图控制器并转到上一个视图控制器 .

请建议我的方法是否正确?

错误:致命错误:在展开Optional值时意外发现nil

先感谢您

回答(1)

3 years ago

试试这个:

view func ButtonPressed() { 

print("Button Pressed!!") // This will create the new instance of the view controller. 

let vc = UIStoryboard(name:"Main", bundle:nil).instantiateViewController(withIdentifier: "Storage") as! testClass 

vc.delegate = self

self.navigationController?.pushViewController(vc, animated:true) 
}

您没有将委托设置为第一个视图控制器 .