我有一个带有正确协议的MainWindowViewController。我还在MainWindowViewController中实现了dataSouce方法。
@interface MainWindowController : UIViewController < UITableViewDelegate, UITableViewDataSource, UAModalPanelDelegate, UIGestureRecognizerDelegate>
我在MainWindowViewController的viewDidLoad
中设置了delegate和dataSource。
self.friendsTableView.delegate = self;
self.friendsTableView.dataSource = self;
我应该按下好友按钮。已加载xib文件名FriendsPopUpView_iPhone,它应该会显示UITableView
个朋友。但是friendsPopUpView的tableview显示为空行。我做错了什么?
FriendsPopUpView_iPhone.xib包含UITableView
。
friendsTableView是在FriendsPopUpView_iPhone.xib中创建的tableview的插座。
friendsPopUpView是FriendsPopUpView_iPhone.xib中视图的UIView
出口。
这是连接到主MainWindowController上的朋友按钮的操作。
- (IBAction)on_friends:(id)sender {
if (self.friendsPopUpView == nil) {
[[NSBundle mainBundle] loadNibNamed:@"FriendsPopUpView_iPhone" owner:self options:nil];
[self.view addSubview:self.friendsPopUpView];
UIButton* clickedButton = (UIButton*) sender;
CGRect sFrame = CGRectMake(clickedButton.frame.origin.x-100, clickedButton.frame.origin.y,
self.friendsPopUpView.frame.size.width,
self.friendsPopUpView.frame.size.height);
self.friendsPopUpView.frame = sFrame;
}
}
答案 0 :(得分:2)
弹出视图nib是否包含到MainWindowViewController类的连接出口(如self.friendsPopUpView)?它必须是为了让任何事情都有效。
在表视图存在之前,您无法设置委托和数据源。触发MainWindowViewController viewDidLoad时不存在。要在代码中设置委托和数据源,请在加载nib后,在表存在后执行此操作。
如果您将其他插座(如friendsPopUp和friendsTableView)设置为nib插座(连接到您将设置为MainWindowViewController的“文件所有者”),那么您可以设置委托和数据源的方式相同,无需代码需要。否则,在加载nib后在代码中执行...
- (IBAction)on_friends:(id)sender {
if (self.friendsPopUpView == nil) {
[[NSBundle mainBundle] loadNibNamed:@"FriendsPopUpView_iPhone" owner:self options:nil];
// assuming you have a friendsPopUpView outlet setup in the nib
// also assuming you have a friendsTableView outlet setup in the nib, both of these connected
// now this will work
self.friendsTableView.delegate = self;
self.friendsTableView.dataSource = self;