首页 > 解决方案 > 导航栏上的蓝牙工作和不工作

问题描述

在此处输入图像描述

你好

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

该应用程序必须在每个视图中连接和断开蓝牙。

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

并使用串口连接蓝牙。

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

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

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

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

  4. 开始 -> V3 -> V3 Connect Btn -> V1 -> V1 Button -> V2 : 蓝牙断开

  5. 开始 -> V2 -> V2 Connect Btn -> V3 : 蓝牙断开

当我在图像中绘制时,原始应用程序由 3 个视图组成,只有 V2 有一个导航栏来连接蓝牙。

因此,当我向 V1 和 V2 添加导航栏时,我将 V2 中的功能复制到 V1、V3。

以下是views3中的一些常见代码。

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 不一样(黄色箭头),它可能会产生问题。

但这是荒谬的想法。

我怎么解决这个问题?

我必须单独传递数据吗?

还是有我错过的代码?

标签: xcodebluetoothuitabbarcontrolleruinavigationbar

解决方案


推荐阅读