簡體   English   中英

如何將數據從UITableView單元格獲取到全局變量

[英]How to get data from UITableView cell to a global variable

我正在嘗試在UITableView保存單元格的文本以供以后使用。 我在不同的Stack Overflow帖子上看到建議使用

sender.view

當我將其打印到控制台時,重新放置是:

Optional(<UITableViewCell: 0x7f8e0a803400; frame = (0 0; 375 50); text = 'Event 1'; clipsToBounds = YES; autoresize = W; gestureRecognizers = <NSArray: 0x60400024f150>; layer = <CALayer: 0x60400002b940>>)

但是,當我嘗試訪問

sender.view?.text

XCode顯示錯誤提示

Value of type 'UIView' has no member 'text'

我還沒有找到從UIView中獲取文本的任何方法,即使有可能,怎么辦? 提前致謝!

編輯:

發送者是一個UITapGestureRecognizer我正在通過按按鈕傳遞給該方法

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) ->   UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTapGesture))
    tapGesture.numberOfTapsRequired = 1
    tapGesture.numberOfTouchesRequired = 1
    cell.textLabel?.text = mydata[indexPath.item]
    cell.addGestureRecognizer(tapGesture)
    cell.isUserInteractionEnabled = true
    return cell
}


@objc func handleTapGesture(sender: UITapGestureRecognizer) {
    performSegue(withIdentifier: "SegueToScanner", sender: self)
}

嘗試將sender.view強制轉換為UITableViewCell,那么您應該能夠訪問單元格的textLabel。

guard let cell = sender.view as? UITableViewCell else {
    //error handling
    return
}

let text = cell.textLabel.text

不確定為什么要在tableView單元格上使用輕擊手勢識別器。 這是另一種可能對您有用的解決方案。

您可以使用func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)從委托方法UITableViewDelegate

在您的情況下,它應該看起來像這樣。

extension YourViewController: UITableViewDelegate {
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if let cell = tableView.cellForRow(at: indexPath) as? UITableViewCell {
             let text = cell.textLabel?.text
    }
}

確保您的ViewController符合viewDidLoad UITableViewDelegate

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM