导航栏上的蓝牙有效且不起作用

时间:2019-09-11 03:07:51

标签: xcode bluetooth uitabbarcontroller uinavigationbar

enter image description here

我有一个由1个标签栏控制器中的3个导航控制器组成的应用。

该应用必须在每个视图中都可以连接和断开与蓝牙的连接。

所以我在导航栏中添加了一个按钮以连接到蓝牙功能。

并使用串行接口连接蓝牙。

但是导航栏中的按钮有时可以工作,有时不能。

  1. 开始-> V1连接Btn-> V1按钮-> V2-> V2按钮:不 工作。 (V1和V2上的按钮在功能上相同,向连接的设备发送“ s”)

  2. 开始-> V2-> V1连接Btn-> V2-> V2按钮:有效。

  3. 开始-> V3-> V3连接Btn-> V1-> V1按钮:有效。

  4. 开始-> V3-> V3连接Btn-> V1-> V1按钮-> V2:蓝牙断开连接

  5. 开始-> 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不一样(黄色箭头),这可能会造成问题。

但这是荒谬的想法。

我该如何解决这个问题?

我必须分别传递数据吗?

还是我错过了密码?

0 个答案:

没有答案