2016-09-18 35 views
0

我有一个View1当我点击文本框我要view2(表视图)来选择一个值。我想将选取的值发送到该文本框的view1。传递数据到以前的视图没有segue,@ IBaction swift

控件是以编程方式创建的,所以我没有使用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中我打电话委托方法,并试图传递的价值,但没有成功的价值。

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

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

错误: 致命错误:意外发现零而提前展开的可选值

谢谢

+0

你如何从一个视角到另一个视角而无需继续? –

+0

当文本框被编辑我打电话下面FUNC导航到其他视图 FUNC ButtonPressed() { 打印(“按钮按下!!”) //这将创建视图控制器的新实例。 让vc = UIStoryboard(name:“Main”,bundle:nil).instantiateViewController(withIdentifier:“Storage”)as! testClass self.navigationController?.pushViewController(vc,animated:true) } – Dev

回答

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) 
} 

您没有设置委托第一视图控制器。

+0

我这样做了,但没有执行协议方法。 也没有错误 – Dev

+0

如果我要使用按钮触发事件ViewCOntroller2然后只有委托正在执行。我想要它为UITextBox事件 此流程正在工作。 ViewController1 - >按钮(onclick) - >显示ViewController2选择代理正在执行的值。 此流程不起作用 ViewController1 - > UIText(onclick) - >显示ViewController2关于选择代理执行的值。 dynamicTxtField.addTarget(个体经营,行动: “ButtonPressed”,为:UIControlEvents.editingDidBegin) dynamicTxtField.addTarget(个体经营,行动: “ButtonPressed”,为:UIControlEvents.editingDidBegin) – Dev