我在25 tabs
中有UITabBarController
,每个标签显示一个tableview
,其中包含不同的数据。我可以在所有选项卡中使用相同的tableview
和不同的数据。剩余底部显示的4个标签将显示更多。
P.S。 :我正在快速编码。
答案 0 :(得分:2)
是的,你当然可以。只需实例化视图控制器的新实例,将其连接到数据源并委派并呈现它。
标签栏控制器中的25个标签是疯了。您需要重新考虑您的用户界面。答案 1 :(得分:0)
是的,你可以。
您可以使用开关检测所选的标签栏项目索引,然后您可以根据需要分配数据源。
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
//suppose index is your tab Bar item index
switch index {
case 0:
return YOUR_DATA_ARRAY1.count
case 1:
return YOUR_DATA_ARRAY2.count
.
.
.
case 25:
return YOUR_DATA_ARRAY25.count
default:
break
}
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("YourCellIdentifier", forIndexPath: indexPath)
//You can use same switch here to access objects from your data array and use it to assign values for cell
return cell;
}
SIDE NOTE :实际上您的方法是错误的,因为您的数据非常大。您仍然可以使用此方法,但我强烈建议您重新考虑它。
答案 2 :(得分:0)
所以,假设您有一个基本的ViewController名称BaseViewController.swift
。在该控制器中,您有一个名为dataSource的数组,如 -
var dataSource = [String]()
然后在协议列表中添加所需的委托和数据源,如 -
class BaseViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
现在就在你之后添加你的tableview。
var myTableView: UITableView!
现在在viewDidLoad方法中,添加你的表。
override func viewDidLoad() {
super.viewDidLoad()
self.myTableView = UITableView.init(frame: self.view.bounds)
self.myTableView.delegate! = self
self.myTableView.dataSource! = self
self.view.addSubview(self.myTableView)
}
现在只需实现数据源方法。
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return self.dataSource.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCellWithIdentifier("myTableViewCell", forIndexPath: indexPath)
cell.textLabel.text = self.dataSource[indexPath.row] //assuming you only have a string in your array
return cell;
}
现在你需要做的就是扩展这个类。假设您的第一个Tab与ViewControllerA.swift对应。
所以,就像这样延伸 -
class ViewControllerA: BaseViewController
然后在viewDidLoad
方法中,将数据数组指定为dataSource
数组。
因此,假设第一个控制器将显示数组名称dataA。
因此,您只需在viewDidLoad
方法中执行此操作,
self.dataSource = dataA
如果您的dataSource需要显示复杂数据(如带有图像,标题或多个标签的类对象),您可以覆盖该特定类中的cellForRowAtIndexPath
。这样,它会影响其他控制器。
希望这有帮助。