【发布时间】:2016-08-19 04:45:07
【问题描述】:
我有两个视图控制器,我们称之为 X 和 Y。X 有一个称为“容器”的 UIView。 Y 有一个 UIButton 和 UITableView,委托和数据源设置为 Y。在我初始化 X 内部的 Y 视图后,X 的容器执行container.addSubView (Y.view)。显示了按钮和表格视图,但表格视图根本没有任何内容。当我添加断点时,根本不会调用 numberOfRowsInSection 和 cellForRowAtIndexPath 函数。但是如果我直接打开 Y 视图控制器,表格视图会正确更新。为什么会这样?以及如何解决?谢谢。
编辑:代码。
class Util: NSObject {
static func getViewControllerID(vcname: String, fromStoryboard storyboardName: String = "Main") -> UIViewController {
return UIStoryboard(name: storyboardName, bundle: nil).instantiateViewControllerWithIdentifier(vcname)
}
}
class X : UIViewController {
var tabs = [UIView]();
var tabIdx = 1;
var views = [UIView]();
@IBOutlet var container : UIView!;
override func viewDidLoad() {
super.viewDidLoad();
for i in 1...4 {
let tab = self.view.viewWithTag(i)!;
tab.backgroundColor = UIColor.clearColor();
tabs.append(tab);
}
views.append(Util.getViewControllerID("Dummy").view);
views.append(Util.getViewControllerID("Dummy").view);
views.append(Util.getViewControllerID("Y").view);
views.append(Util.getViewControllerID("Dummy").view);
changeActiveTab(0);
}
func changeActiveTab (idx : Int) {
tabIdx = idx;
for tab in tabs { tab.backgroundColor = UIColor.clearColor(); }
tabs[idx].backgroundColor = UIColor(hexString: "41C7DB");
for view in views { view.removeFromSuperview(); }
let view = views[idx];
view.frame = container.bounds;
container.addSubview(view);
}
@IBAction func tabTapped (sender: AnyObject) {
let btn = sender as! UIButton;
let idx = btn.tag - 11;
changeActiveTab(idx);
}
}
class Y : UIViewController, UITableViewDelegate, UITableViewDataSource {
var dummyData = [String]();
override func viewDidLoad() {
super.viewDidLoad()
for i in 101...106 {
let btn = self.view.viewWithTag(i)! as! UIButton;
btn.makeViewRoundedRectWithCornerRadius(4);
}
dummyData.append("a");
dummyData.append("b");
dummyData.append("c");
dummyData.append("d");
dummyData.append("e");
dummyData.append("f");
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1;
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5;
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell")!;
cell.backgroundColor = UIColor.clearColor();
var lbl = [UILabel]();
for i in 1...6 { lbl.append(cell.viewWithTag(i)! as! UILabel); }
for i in 0...5 { lbl[i].text = dummyData[i]; }
return cell;
}
}
【问题讨论】:
-
@user3182143 完成。
标签: ios swift uitableview subview