嗨
我有一个由1个标签栏控制器中的3个导航控制器组成的应用。
该应用必须在每个视图中都可以连接和断开与蓝牙的连接。
所以我在导航栏中添加了一个按钮以连接到蓝牙功能。
并使用串行接口连接蓝牙。
但是导航栏中的按钮有时可以工作,有时不能。
开始-> V1连接Btn-> V1按钮-> V2-> V2按钮:不 工作。 (V1和V2上的按钮在功能上相同,向连接的设备发送“ s”)
开始-> V2-> V1连接Btn-> V2-> V2按钮:有效。
开始-> V3-> V3连接Btn-> V1-> V1按钮:有效。
开始-> V3-> V3连接Btn-> V1-> V1按钮-> V2:蓝牙断开连接
开始-> V2-> V2连接Btn-> V3:蓝牙断开连接
在我绘制图像时,原始应用包含3个视图,只有V2具有 导航栏以连接蓝牙。
因此,当我将导航栏添加到V1和V2时,我将功能从V2复制到了V1,V3。
以下是view3中的一些常见代码。
import UIKit
import Charts
import CoreBluetooth
import QuartzCore
class GraphViewController: UIViewController, BluetoothSerialDelegate{
@IBOutlet weak var barButton: UIBarButtonItem!
@IBOutlet weak var navItem: UINavigationItem!
serial = BluetoothSerial(delegate: self)
}
deinit {
NotificationCenter.default.removeObserver(self)
}
@IBAction func barButtonPressed(_ sender: Any) {
if serial.connectedPeripheral == nil {
performSegue(withIdentifier: "ShowScanner3", sender: self)
// *********** V1 : "ShowScanner2, V2 : "ShowScanner ***************
} else {
serial.disconnect()
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func serialDidChangeState() {
if serial.centralManager.state != .poweredOn {
dismissKeyboard()
let hud = MBProgressHUD.showAdded(to: view, animated: true)
hud?.mode = MBProgressHUDMode.text
hud?.labelText = "Bluetooth turned off"
hud?.hide(true, afterDelay: 1.0)
}
}
func serialDidDisconnect(_ peripheral: CBPeripheral, error: NSError?) {
reloadView()
dismissKeyboard()
let hud = MBProgressHUD.showAdded(to: view, animated: true)
hud?.mode = MBProgressHUDMode.text
hud?.labelText = "Disconnected"
hud?.hide(true, afterDelay: 1.0)
}
}
我将segue连接到导航“模态呈现”,并在V2 segue之后将其命名为“ Show Scanner1”和“ Show Scanner3”。
我以为segue不一样(黄色箭头),这可能会造成问题。
但这是荒谬的想法。
我该如何解决这个问题?
我必须分别传递数据吗?
还是我错过了密码?