如何使用界面构建器在tableView中添加视图

时间:2012-04-24 01:49:44

标签: iphone objective-c ios xcode interface-builder

我正在学习iOS编程。

我想知道使用界面构建器。

我制作一个tableViewController并制作.xib文件

现在我可以在界面构建器中看到UITableView。

我必须添加一个名为myView的视图,其中包含按钮,标签等。

我希望myView设置在tableView的区域顶部,就像tableview的标题一样。

所以我制作了一个myView,并添加了按钮,标签等。

然后我将该视图拖入UITableView。好的,这很好。

我可以看到myView在界面构建器中设置为UITableView的顶部。

但我运行该程序,myView不会出现。

当然使用IBOutlet连接,并声明属性和合成。

但我像这样使用NSLog

if(self.myView == nil)
   NSLog(@"omg it's nil!!!");

我无法理解NSLog是打印出我的提示区域。

因为我在界面构建器中创建了该视图!

我可以看到tableView,当然可以看到细胞。

为什么myView没有出现?

我该如何解决?

我想知道如何使用界面构建器修复它。

请帮帮我

3 个答案:

答案 0 :(得分:2)

不确定是否可以使用界面构建器,我通常手动创建一个视图并将其添加到viewWillAppear方法中的tableview标题中,如下所示:

    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.tableView.bounds.size.width, 60)];  
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 10,self.tableView.bounds.size.width, 50)];
    label.text = [person getFullName];
    label.textAlignment = UITextAlignmentCenter;
    label.backgroundColor = [UIColor clearColor];
    label.font = [UIFont boldSystemFontOfSize:25];
    label.shadowColor = [UIColor whiteColor];
    label.shadowOffset = CGSizeMake(0,1);
    [headerView addSubview:label];

    self.tableView.tableHeaderView = headerView;

更简单的方法是在单独的nib文件中创建一个视图,然后在加载tableview时将其加载到表头中:

UIViewController *aViewController = [[UIViewController alloc] initWithNibName:@"MYXIBFILEHERE" bundle:nil];
self.tableView.tableHeaderView = aViewController.view;

答案 1 :(得分:2)

我对XCode 4.3的体验:

你必须首先在同一个超级UIView上放置UITableView和UIView。然后,当将UIView拖到UITableView的顶部时,您会注意到XCode突出显示将视图作为页脚插入的选项。

完成后,您可以从superview中分离UITableView并将其删除。

答案 2 :(得分:0)

我能够让它发挥作用的唯一方法如下:

  1. 将新的nib文件添加到项目中。像你一样在nib文件中布局视图 希望你的表页脚/标题看起来。
  2. 将笔尖中文件所有者的类设置为您的类 的UITableViewController。这样我们就可以在这里连接视图了 nib到UITableViewController类中的IBOutlet。
  3. 在UITableViewController中设置UIView IBOutlet以指向 查看新笔尖。
  4. 在你的UITableViewController类中,执行类似这样的操作 viewDidLoad中:
  5. (显然,如果代码直接在编号列表之后,代码将无法正确格式化。)

    [[NSBundle mainBundle] loadNibNamed:@"statsFooterView" owner:self options:nil];
    self.tableView.tableFooterView = myFooterView;