gpt4 book ai didi

ios - 在 Swift 中使用 Textfield 的 Table View 来查看 Controller 时出错

转载 作者:行者123 更新时间:2023-11-28 13:13:07 24 4
gpt4 key购买 nike

好的,让我解释一下我遇到的问题。在 main.storyboard 中,我创建了一个新的 tableView Controller 并在顶部添加了一个导航栏。我为新的 tableView Controller 创建了 segue,一切正常。问题是在滚动表格时导航栏不会停留在顶部。在互联网上搜索后,大多数人说,只需创建一个普通的 ViewController 并向其添加一个 TableView ,然后添加导航栏等。所以我这样做了,但是现在,当您在文本字段中按下时,应用程序就会崩溃, 并显示:

Thread 1: signal SIGABRT next to the line: class AppDelegate:
UIResponder, UIApplicationDelegate.

我一辈子都弄不明白为什么会这样,而且我对 swift 和一般的代码都不熟悉,所以想知道我是否是错误的人。为了测试我的代码中的问题是否出现在其他地方,我创建了一个全新的 Xcode 项目来重新创建这个场景。但我遇到了完全相同的错误,这让我认为这不是我的其余代码。

所以,这是我新的基本 Xcode 项目代码,用于展示我正在尝试做的事情。

View Controller :

Import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

@IBOutlet var textField: UITextField!

override func viewDidLoad() {
super.viewDidLoad()

textField.delegate = self
}

func textFieldDidBeginEditing(textField: UITextField) {

performSegueWithIdentifier("countryTableView", sender: self)

}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}


}

表格 View Controller :

import UIKit

class TableViewController: UITableViewController, UITableViewDataSource, UITableViewDelegate {

var countryPicker = ["Uk", "Germany", "Colombia", "Spain"]

override func viewDidLoad() {
super.viewDidLoad()

}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

// MARK: - Table view data source



override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete method implementation.
// Return the number of rows in the section.
return countryPicker.count
}


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell")

cell.textLabel!.text = countryPicker[indexPath.row]

return cell
}
}

我已将 TableView 的数据源和委托(delegate)链接到 View Controller 。就我而言,我已经完成了其他一切。

最佳答案

您的文字说您已经在 Storyboard 中创建了 UIViewController 并向其添加了 UITableView(如果我没看错的话)。但是您的 TableViewControllerUITableViewController 子类,而不是 UIViewController 子类。这可能是崩溃的原因。

将父类(super class)更改为 UIViewController 并添加一个 UITableView IBOutlet:

@IBOutlet private weak var tableView: UITableView!

不要忘记将它连接到 Storyboard中。

此外,一些代码清理可能会有所帮助...


不要在代码中分配 textField 的委托(delegate)。在 Interface Builder 中执行此操作。代码越少越好。


接下来,删除所有 -didReceiveMemoryWarning 代码。您没有使用它,所以它只会打乱您的代码,并且打乱您的问题。

每当您看到这种只调用 super 的方法模式时,都可以安全地删除它并且行为不会受到影响。例如,你也可以在TableViewController类的-viewDidLoad方法中移除它。


删除这些评论:

// #warning Incomplete method implementation.
// Return the number of rows in the section.

这是来自 Xcode 的模板。它可以帮助您解决问题,但不要在您的代码中留下垃圾。同样,它在 Stack Overflow 上没有用。


让我们修复您的 -tableView:cellForRowAtIndexPath: 调用。这是不对的。你每次都在创建一个新的单元格,而不是重复使用单元格。改为这样做:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("UITableViewCell") as! UITableViewCell
cell.textLabel!.text = countryPicker[indexPath.row]
return cell
}

确保 Storyboard的 TableView 中有一个原型(prototype)单元格。它应该是 UITableViewCell 类型并且有一个标识符“UITableViewCell”。


关于ios - 在 Swift 中使用 Textfield 的 Table View 来查看 Controller 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30492722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com