2017-05-10 39 views
0

我怎么能传递数据的UIViewController从UIView的我怎样才能将数据传递UIViewContoller从UIView的在swift3

我使用的功能,但它不工作

协议名称是startcalldelegate和函数的名称是startcall

的UIView代码

protocol StartCallDelegate: class { 
func startCall(localNickname :String, remoteNickname :String)} 

class CardView: UIView { 

let managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 

weak var delegate: CardViewDelegate? 
weak var socketdelegate: StartCallDelegate? 

@IBOutlet weak var UserPhoto: UIImageView! 
@IBOutlet weak var UserNickName: UILabel! 
@IBOutlet weak var UserAge: UILabel! 
@IBOutlet weak var UserPeople: UILabel! 

var localNickname: String = "" 
var remoteNickname: String = "" 

@IBAction func SendMessage(_ sender: Any) { 
    print("SendMessage") 

    //print(localNickName) 
    //print(UserNickName.text!) 
} 

@IBAction func SendVideoCall(_ sender: Any) { 
    print("SendVideoCall") 

    let entityDescription = NSEntityDescription.entity(forEntityName: "Profile", in: managedObjectContext) 
    let request = NSFetchRequest<NSFetchRequestResult>() 
    request.entity = entityDescription 

    do { 
     let objects = try managedObjectContext.fetch(request) 

     if objects.count > 0 { 
      let match = objects[0] as! NSManagedObject 
      localNickname = match.value(forKey: "nick") as! String 

     } else { 
      print("Nothing founded") 
     } 
    } catch { 
     print("error") 
    } 

    remoteNickname = UserNickName.text! 

    socketdelegate?.startCall(localNickname: localNickname, remoteNickname: remoteNickname) 
    delegate?.VideoChatSegue() 

} 

}

的UIViewController代码

class ViewController: UIViewcontroller, StartCallDelegate { 
var localNickname: String = "" 
var remoteNickname: String = "" 

override func viewDidLoad() { 
    super.viewDidLoad() 
    print(localNickname) 
    print(remoteNickname) 
} 

    func startCall(localNickname: String, remoteNickname: String) { 
    print("Action startcall func") 
    self.localNickname = localNickname 
    self.remoteNickname = remoteNickname 
} 

startCall FUNC不工作

+0

在其中创建这个'CardView'的对象? –

+0

@leeyuno bcoz你的代表是无我猜。 –

+0

@NiravD其他ViewController – leeyuno

回答

1

您需要的ViewController定义委托” viewDidLoad中

let objOardView = CardView() // this is only test purpose 
objOardView.socketdelegate = self 
+0

在viewcontroller中添加此代码但不工作.. T^T – leeyuno

+0

是否在控制器中声明了CardView? – KKRocks

+0

是的,在ViewController – leeyuno