gpt4 book ai didi

ios - 如何使用 Storyboard 设计共享表格 View 的更多 View

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

我想要多个 View ,每个 View 包含 2 个表格 View (每个 View 占半个屏幕)。每个 View 将共享其中一个 TableView 。表格 View 的行为或多或少是独立的。

我想到了两个选择:

1) 独立 View ,每当 View 就位时,共享 TableView 就会重新加载。

2)每个 View 共享一个表格 View (类似于分割 View Controller 中发生的情况(尽管我无法使用分割 View ,因为我想在设备处于纵向模式时使用自适应布局)。

我感觉第二种方法是最好的,但我想不出一种设计方法。获得这个的最好方法是什么?

我尝试按照 Andriy Gordiychuk(答案 1)的建议进行操作,但我认为我把事情搞砸了......:
当我运行该应用程序时,它会成功构建,但每当我尝试访问共享 View 并出现 EXC_BAD_ACCESS 错误时,它就会崩溃。

这是 SharedReusableTableViewDelegate:

class SharedReusableTableViewDelegate: UIViewController, UITableViewDelegate, UITableViewDataSource {

var databasePath = String()
var selectedVerse : Int = 1

func registerClass(UITableViewCell, forCellReuseIdentifier identifier: String){}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let row : Int = indexPath.row
var getVerse = DatabaseDB()
var verse = DatabaseVars()
(verse.book, verse.chapter, verse.verseNumber, verse.extra, verse.verseText) = getVerse.getVerseBy(row, database: databasePath as String)
let cell: AnyObject = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath)
cell.textLabel?!.text = "\(verse.chapter),\(verse.verseNumber) \(verse.verseText)"
return cell as! UITableViewCell
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let numberofCells = 200
return numberofCells
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
selectedVerse = indexPath.row + 1
println("You selected cell #\(selectedVerse)!")
}

}

这是 Table1 View 的 Controller :

class Table1: UIViewController {

@IBOutlet weak var verseView: UITableView!
var databasePath = NSString()
var currentPath = NSString()

override func viewDidLoad() {
super.viewDidLoad()

let filemgr = NSFileManager.defaultManager()
let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let docsDir = dirPaths[0] as! String
databasePath = docsDir.stringByAppendingPathComponent("LuceDaLuce.db")
var fileCopyError : NSError? = NSError()
currentPath = NSBundle.mainBundle().pathForResource("tmp", ofType: "db")!
println("currentPath: \(currentPath)")
if !filemgr.fileExistsAtPath(databasePath as String) {
if filemgr.copyItemAtPath(currentPath as String, toPath: databasePath as String, error: &fileCopyError) {
println("Copy successful")
} else {
println("Copy failed with error: \(fileCopyError!.localizedDescription)")
}
} else {println("The database is already there")}

let delegate = SharedReusableTableViewDelegate()
delegate.databasePath = databasePath as String
verseView.delegate = delegate
verseView.dataSource = delegate
}
}

我正在从 sqlite 数据库(我已经测试过)加载单元格的内容。

有什么建议吗?
谢谢,

最佳答案

创建一个类,它将作为共享 TableView 的数据源/委托(delegate):

class SharedReusableTableViewDelegate:UITableViewDelegate,UITableViewDataSource {

//put below all the delegate/data source functions

}

现在您所要做的就是在 View Controller 中为表创建 IBOutlet,然后在 viewDidLoad 中添加以下内容:

let delegate = SharedReusableTableViewDelegate()
mySharedTableView.delegate = delegate
mySharedTableView.dataSource = delegate

就是这样。

通过此设置,您可以将填充表格的逻辑与绘制表格的逻辑分开。您必须为每个 View Controller 场景创建 UI 设计,然后只需为每个重用的 TableView 分配正确的委托(delegate)即可。该委托(delegate)将所有代码包含在一个文件中。

我认为这就是您想要实现的目标。如果没有,您能否澄清一下您到底想要实现什么目标?

关于ios - 如何使用 Storyboard 设计共享表格 View 的更多 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32128159/

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