Ios Swift:静态UITableViewCell中的TableView
我有一个Ios Swift:静态UITableViewCell中的TableView,ios,uitableview,swift,Ios,Uitableview,Swift,我有一个UITableViewController,大约有五个不同的静态单元格。在其中一个单元格中,我试图加载动态UITableView 在interface builder中,我标记了主UITableViewController的tableView0,然后标记了动态tableView1 每次尝试加载控制器时,我都会崩溃。以下是我到目前为止的大致代码: override func numberOfSectionsInTableView(tableView: UITableView) ->
UITableViewController
,大约有五个不同的静态单元格。在其中一个单元格中,我试图加载动态UITableView
在interface builder中,我标记了主UITableViewController的tableView0
,然后标记了动态tableView1
每次尝试加载控制器时,我都会崩溃。以下是我到目前为止的大致代码:
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
switch tableView.tag {
case 0:
return 2;
case 1:
return 1;
default:
break;
}
return 0
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch tableView.tag {
case 0:
return 5;
case 1:
return 2;
default:
break;
}
return 0
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("ComboInfoCell", forIndexPath: indexPath) as! UITableViewCell
if tableView.tag == 1 {
// Honestly not sure how to configure only the reusablecells, and not affect the static cells
}
return cell
}
因此,我需要知道是否有可能在静态tableviewcells中嵌入动态TableView,以及如何做到这一点。根据我的实验,您不能将同一个UITableViewController用作两个表视图的数据源和委托。对于静态表视图,您根本不应该实现数据源方法。奇怪的是,即使我断开静态表视图和表视图控制器之间的数据源和委托连接,该表视图仍然调用表视图控制器类中的numberOfRowsInSection。如果我在代码中显式地将数据源设置为nil,这将阻止它调用数据源方法,但是嵌入式动态表视图也无法调用它们,因此此结构不起作用 但是,您可以通过使用不同的对象作为嵌入动态表视图的数据源和委托来解决这个问题。为嵌入式表视图创建一个IBOutlet,并将其数据源和委托设置为此新对象(在本例中,该类是DataSource,它是NSObject的子类)
在DataSource类中,只需像平常一样实现数据源和委托方法。根据我的实验,您不能使用同一个UITableViewController作为两个表视图的数据源和委托。对于静态表视图,您根本不应该实现数据源方法。奇怪的是,即使我断开静态表视图和表视图控制器之间的数据源和委托连接,该表视图仍然调用表视图控制器类中的numberOfRowsInSection。如果我在代码中显式地将数据源设置为nil,这将阻止它调用数据源方法,但是嵌入式动态表视图也无法调用它们,因此此结构不起作用 但是,您可以通过使用不同的对象作为嵌入动态表视图的数据源和委托来解决这个问题。为嵌入式表视图创建一个IBOutlet,并将其数据源和委托设置为此新对象(在本例中,该类是DataSource,它是NSObject的子类)
在DataSource类中,只需像平常一样实现数据源和委托方法。控制台在崩溃时说了什么?@ad121在崩溃时说了什么?控制台在崩溃时说了什么?@ad121在崩溃时说了什么?ad121在崩溃时说了什么无法将DataSource类型的值分配给委派的UITableViewDataSourceName类型的值,我的自定义类是NSObjectName的子类。关于如何解决此问题,您有什么想法吗?@YichenBman,您需要告诉编译器,您遵守类顶部的协议。像这样:
类数据源:NSObject,UITableViewDataSource,UITableViewDelegate
哇,我想你已经回答了我的另一个问题。一如既往,非常感谢你。严肃地说,我从来没有想过要做这样的事情。我得到的错误是:“无法将DataSource类型的值分配给委派的UITableViewDataSourceName类型的值,我的自定义类是NSObjectName的子类。有没有办法解决这个问题?@YichenBman,您需要告诉编译器,您在类的顶层遵守了这些协议。像这样:类数据源:NSObject,UITableViewDataSource,UITableViewDelegate
哇,我想你已经回答了我的另一个问题。一如既往,非常感谢你。说真的,我从来没有想过要做这样的事。
class TableViewController: UITableViewController {
@IBOutlet weak var staticTableView: UITableView!
@IBOutlet weak var dynamicTableView: UITableView!
var dataSource = DataSource()
override func viewDidLoad() {
super.viewDidLoad()
dynamicTableView.dataSource = dataSource
dynamicTableView.delegate = dataSource
}
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if indexPath.row != 1 {
return 44
}else{
return 250 // the second cell has the dynamic table view in it
}
}
}