当我点击文本框时,我有一个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中选择了值,我就会调用委托方法并尝试传递该值,但没有成功。
我不想创建上一个视图控制器的新实例,因为我将丢失用户已输入的数据,因此我弹出当前视图控制器并转到上一个视图控制器。
请建议我的方法是否正确?
错误: 致命错误:在解包可选值时意外发现nil
提前谢谢
答案 0 :(得分:0)
试试这个:
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)
}
您没有将委托设置为第一个视图控制器。