gpt4 book ai didi

ios - 如何将 Storyboard链接到 View Controller

转载 作者:行者123 更新时间:2023-11-30 11:33:49 24 4
gpt4 key购买 nike

我正在尝试将我制作的 Storyboard连接到聊天应用程序中的 View Controller 文件。

我所做的是...

1)创建一个 View Controller 文件(swift)。

2) 创建 Storyboard文件并将 View Controller 类设置为自定义类。

3)将 Storyboard中的组件( TableView )连接到 View Controller 作为 socket 。

现在,我收到“线程 1: fatal error :展开可选值时意外发现 nil”错误消息。

代码如下。

import UIKit

class ChatViewController: UIViewController {

var _device_width: Int = 0
var _device_height: Int = 0
var _footer_size: Int = 0
var _backBtn: UIBarButtonItem!
var window: UIWindow?
var _toolBar: UIToolbar!
var bottomView: ChatRoomInputView!
var chats: [ChatEntity] = []

@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
super.viewDidLoad()

showNavigateBar()

setupUI()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}

override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
}

override var canBecomeFirstResponder: Bool {
return true
}

override var inputAccessoryView: UIView? {
return bottomView
}


func showNavigateBar() {
let backButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
navigationItem.backBarButtonItem = backButtonItem
self.title = 'My App'

}
}

extension ChatViewController {
func setupUI() {
self.view.backgroundColor = UIColor(red: 113/255, green: 148/255, blue: 194/255, alpha: 1)

// ERROR happen on this line.
// "Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value"
tableView.separatorColor = UIColor.clear


tableView.estimatedRowHeight = 10000
tableView.rowHeight = UITableViewAutomaticDimension
tableView.allowsSelection = false
tableView.keyboardDismissMode = .interactive

tableView.register(UINib(nibName: "YourChatViewCell", bundle: nil), forCellReuseIdentifier: "YourChat")
tableView.register(UINib(nibName: "MyChatViewCell", bundle: nil), forCellReuseIdentifier: "MyChat")

let chat1 = ChatEntity(text: "text1", time: "10:01", userType: .I)
let chat2 = ChatEntity(text: "text2", time: "10:02", userType: .You)
let chat3 = ChatEntity(text: "text3", time: "10:03", userType: .I)
chats = [chat1, chat2, chat3]
}
}

extension ChatViewController: UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.chats.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let chat = self.chats[indexPath.row]
if chat.isMyChat() {
let cell = tableView.dequeueReusableCell(withIdentifier: "MyChat") as! MyChatViewCell
cell.clipsToBounds = true
// Todo: isRead
cell.updateCell(text: chat.text, time: chat.time, isRead: true)
return cell
} else {
let cell = tableView.dequeueReusableCell(withIdentifier: "YourChat") as! YourChatViewCell
cell.clipsToBounds = true
cell.updateCell(text: chat.text, time: chat.time)
return cell
}
}
}

extension ChatViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print(indexPath)
}

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return 10
}
}

我将 View Controller 定义为自定义类。 enter image description here

我应该怎么做才能正常工作?请给我建议。

添加)

ChatViewController 被另一个类文件调用。

let chatViewController = ChatViewController()
self.navigationController?.pushViewController(chatViewController, animated: false)

我相信 @IBOutlet 连接正确。

ChatViewController.swift

enter image description here

ChatViewController.storyboard

enter image description here

我知道调用此函数时 tableView 为 nil。

enter image description here其实我对storyboard不太了解,因为我平时不使用storyboard。我更喜欢通过代码创建 UI。但现在,我必须使用 Storyboard文件,因为我想使用聊天系统的示例项目。

添加2)

我想我可能弄错了 Storyboard的设置。我不知道如何使用 Storyboard上的导航 Controller 或入口点。

enter image description here

最佳答案

您应该在 viewLoad() 函数中添加委托(delegate)和数据源。

 override func viewDidLoad() {
super.viewDidLoad()

showNavigateBar()
tableView.delegate = self
tableView.dataSource = self
setupUI()
}

如果此后错误仍然存​​在,请检查 Storyboard 中的“Outlet”。

关于ios - 如何将 Storyboard链接到 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49963571/

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