如何在弹出子视图中使用UITableView?

时间:2013-03-28 01:52:36

标签: ios objective-c

我有一个带有正确协议的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;
    }
}

1 个答案:

答案 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;