【问题标题】:How to use segue in navigation SWIFT Xcode?如何在导航 SWIFT Xcode 中使用 segue?
【发布时间】:2020-12-17 02:02:55
【问题描述】:

我正在构建一个简单的字典应用程序。我已经让它在用户搜索或不搜索时在 UItableView 上显示单词。我正在努力为每个单词分配自己的定义,但是在为单词数组中的每个单词设置目标时遇到了麻烦。

这是我的 ViewController 类及其内容的一部分:

import UIKit
class ViewController: UIViewController {

@IBOutlet weak var searchBar: UISearchBar!
@IBOutlet weak var tableView: UITableView!

var wordSearch = [String]()
var wordArray: [String] = []
var searching = false

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    
    let url = Bundle.main.url(forResource: "zo_words", withExtension: "txt")! // file URL for file "words_alpha.txt"

    do {
        let string = try String(contentsOf: url, encoding: .utf8)
        wordArray = string.components(separatedBy: "\n")
    } catch {
        print(error)
    }
 }
}
extension ViewController: UITableViewDataSource, UITableViewDelegate {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if searching {
            return wordSearch.count
        } else {
            return wordArray.count
                }

这是我的 wordSearch 功能:

extension ViewController: UISearchBarDelegate {
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    wordSearch = wordArray.filter({$0.lowercased().prefix(searchText.count) == searchText.lowercased();})
    searching = true
    tableView.reloadData()
}

无法将“String”类型的值分配给“ViewController”类型 构建时在下面的函数中引发错误

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let destination = segue.destination as? DefinitionViewController {
        destination.word = wordArray[(tableView.indexPathForSelectedRow?.row)!] 

类定义视图控制器:

import UIKit

class DefinitionViewController: UIViewController {
    @IBOutlet weak var lbDefinition:
        UILabel!
    var word: ViewController?
    override func viewDidLoad() {
        super.viewDidLoad()
    
        lbDefinition.text = "\((word?.wordSearch)!)"
}

}

【问题讨论】:

  • 如果您了解 segue 为您自己做了什么,这将对您自己有所帮助。
  • 当从 UItableView 中单击一个单词时,我使用 segue “显示”定义。

标签: ios arrays swift xcode


【解决方案1】:

我认为它不适用,建议从ViewController 获取实例,但您可以使用以下方法轻松完成: 假设您的 viewController 中有 word,那么您必须执行以下操作:

   override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        guard tableView.indexPathForSelectedRow != nil  else {
            return
        }

        let selectedWord = wordArray[tableView.indexPathForSelectedRow!.row]

        let destination = segue.destination as! DefinitionViewController

        destination.word = selectedWord
    }

定义视图控制器:

import UIKit

class DefinitionViewController: UIViewController {
    @IBOutlet weak var lbDefinition:
        UILabel!
    var word: String?
    override func viewDidLoad() {
        super.viewDidLoad()
        guard word != nil else {return}
        lbDefinition.text = "\((word?.wordSearch)!)"
    }
}

【讨论】:

  • 将单词更改为字符串类型不起作用,因为那时我无法在 DefinitionViewController 类中调用 wordSearch()。
  • 能不能加个wordSearch功能可以查到
  • 你能把它添加到帖子中以便能够检查它吗?
  • 但我不认为你可以从 ViewController 中获取变量或单词实例,你可以为它创建结构或类
  • youtube.com/watch?v=v0Hx7q26Hoo&ab_channel=SwiftTutorials 我正在学习本教程。我准备好了,直到视频在 23:11 播放。感谢您的帮助
【解决方案2】:
class ViewController: UIViewController {
      static var wordSearch = [string]()
 }

class DefinitionViewController: UIViewController {
 @IBOutlet weak var lbDefinition:UILabel!
 override func viewDidLoad() {
   super.viewDidLoad()
   lbDefinition.text = "\(ViewController.wordSearch)"
 }
}

【讨论】:

  • 将单词更改为字符串违背了我不能再调用 wordSearch 的目的。
  • 我认为我的问题是我没有单独的单词类。我所拥有的只是 ViewController 类:UIViewController { },它由字符串 wordArray 和 searchWord 组成,它是用户在搜索词中键入的字符串。
  • 你能发布两个 VIewControllers 吗?我可以看看。是 String 类的扩展中的 wordSearch 函数吗?
  • 他们都在帖子中。第一个类在主 ViewController 上。第二个类是DefinitionViewController。我正在尝试使用 var 字从 DefinitionViewClass 调用主类 ViewController:ViewController?但是主类 ViewController 准备函数有一个错误,说我不能像前面所说的在定义类中那样将类型字符串分配给 ViewController,
  • 制作wordSearchstatic。我已经更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 2014-07-12
  • 1970-01-01
  • 2017-03-03
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多