[英]assigned delegate, but function is not called
嗨,大家好,我想在條件滿足時從FirstViewController觸發SecondViewController中的方法。 所以我用委托來做,我的代碼如下:
FirstViewController:
import UIKit
import CoreBluetooth
import Foundation
class BluetoothViewController: UIViewController, ValueChangedDelegate {
if (characteristic.UUID == CBUUID(string: "2AF0")){
DataReceived.Single_Axis = Double(CharValue)
func peripheral(peripheral: CBPeripheral!, didUpdateValueForCharacteristic characteristic: CBCharacteristic!, error: NSError!) {
let singleaxisview = SingeAxisViewController()
singleaxisview.delegate = self
singleaxisview.valueChangedNotifyEveryone()
println("btfired")
}
SecondViewController
import UIKit
import CoreGraphics
protocol ValueChangedDelegate
{
func valueChanged(nValue : String)
}
class SingeAxisViewController: UIViewController {
var delegate : ValueChangedDelegate?
func valueChangedNotifyEveryone()
{
println("hello")
delegate?.valueChanged("changed value")
}
有人可以向我指出我錯過了什么嗎?
代替BTController!.delegate = self
您將不得不使用FirstViewController的對象並設置委托,並且還需要初始化FirstViewController對象。 如果要實現,請參見以下示例代碼。 第一個視圖控制器實現委托方法,並在調用btnClicked時調用第二個視圖控制器,並在valueChanged方法中將響應返回給第一個視圖控制器
import UIKit
class FirstViewController: UIViewController, ValueChangedDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
lbl.text = "inital value"
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
@IBOutlet weak var lbl: UILabel!
@IBAction func btnClicked(sender: AnyObject)
{
let secondViewController = SecondViewController()
secondViewController.delegate = self
secondViewController.valueChangedNotifyEveryone()
}
func valueChanged(nValue : String)
{
print(nValue)
lbl.text = nValue
}
}
第二個視圖控制器,它實現協議,並且還從valueChangedNotifyEveryone方法中調用protocol方法
import UIKit
protocol ValueChangedDelegate
{
func valueChanged(nValue : String)
}
class SecondViewController: UIViewController {
var delegate : ValueChangedDelegate?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func valueChangedNotifyEveryone()
{
delegate?.valueChanged("changed value")
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.