IOS 11更新后,UITableView cell.textLabel.text停止更新

时间:2017-10-02 20:59:57

标签: ios swift xcode

在IOS 10.x

下一切正常

我在应用程序中有一个表,可以扫描可用的BLE设备并将每个设备显示在一个单元格中。

当用户点击某个单元格时,它应该更新textLabel.text属性以说明"请稍候..."。连接后,它应调用tableView.reload data()方法,单元格应列出设备名称。如果设备的状态已连接,则应说连接。

更新到IOS 11后,一切似乎都有效,但我无法更新单元格中的文本以指示“已连接”。"它会一直显示"请等待"点击单元格时的消息。

查看控制器类定义...

class BeanConnect: UIViewController, UITableViewDelegate, PTDBeanManagerDelegate, PTDBeanDelegate {

@IBOutlet var tableView: UITableView!

let beanList=BeanList()
var beanManager: PTDBeanManager?
var waitingToConnect: PTDBean?

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.

    tableView.register(UITableViewCell.self,forCellReuseIdentifier: "Cell")
    tableView.delegate=self
    tableView.dataSource=beanList
    beanManager = PTDBeanManager()
    beanManager!.delegate = self
    //tableView.reloadData()

}

这是我触摸单元格时更新textLabel的位置。这很好。

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let cell=tableView.dequeueReusableCell(withIdentifier: "Cell",for: indexPath as IndexPath)
    cell.textLabel?.text=beanList.items[indexPath.row].name + " Please wait..."
    if (myBean != nil && myBean?.state==PTDBleDeviceState.connectedAndValidated) {
        let waitingBean=beanList.items[indexPath.row]
        self.waitingToConnect=waitingBean
        var e: NSErrorPointer

        print("*******now disconnecting from bean********")

        beanManager?.disconnect(fromAllBeans: e)

    }else {
        myBean=beanList.items[indexPath.row]
        connectToBean(bean: myBean!)
    }

}

这是更新单元格的部分(在单独的模块中)。请注意,调试行表示" ConnectedandValidated"正在被触发。一切似乎都有效,除非该死的标签没有更新。

extension BeanList: UITableViewDataSource {
@available(iOS 2.0, *)
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell=tableView.dequeueReusableCell(withIdentifier: "Cell",for: indexPath as IndexPath)
    let item=items[indexPath.row]
    print("debug code building the table")
    switch item.state {
    case PTDBleDeviceState.attemptingConnection:
        cell.textLabel!.text=item.name + " Connecting..."
        print("debug code attemptingConnection")

    case PTDBleDeviceState.attemptingValidation:
        cell.textLabel!.text=item.name + " Validating..."
        print("debug code attemptingValidation")

    case PTDBleDeviceState.connectedAndValidated:
        cell.textLabel!.text=item.name + " Connected!"
        print("debug code Connected")
        print(item.name + " Connected!")

    default:
        cell.textLabel!.text=item.name
        print("debug code default case")

    }

    return cell

}

任何帮助将不胜感激! TX

1 个答案:

答案 0 :(得分:0)

你不应该在" didSelect"中出列新单元格。使用tableView.cellForRow并获取现有单元格。