首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在iPhone界面生成器中构建UITableView sectionHeader视图?

如何在iPhone界面生成器中构建UITableView sectionHeader视图?
EN

Stack Overflow用户
提问于 2010-07-21 03:16:39
回答 3查看 6.5K关注 0票数 1

我的iPhone应用程序中有一个分组样式的UITableView。现在,我想使用Image、label和activity indicator来自定义部分标题。

为此,我创建了一个新的XIB子类和一个UIViewController文件。我将UIImageView、UILabel和UIActivityIndicatorView作为IBOutlet属性添加到ViewController中,并将它们连接到我在Interface Builder中放入XIB中的控件。

在生成我的UITableView的类中,我设置了节标题(两个,都是上面定义的ViewController的实例),并设置了它们的属性(图像和文本)。然后在tableView委托中返回ViewControllers视图:

代码语言:javascript
复制
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    if (section == 0) {
        return [favoritesSectionHead view];
    } else {
        return [serverlistSectionHead view];
    }
}

这将显示我在Interface Builder中定义的视图,没有自定义图像和文本。我知道为什么会发生这种情况( ViewController的视图是在第一次需要的时候创建的,在我的代码中,这是当我在viewForHeaderInSection方法中返回它的时候-->当我试图设置自定义值时,视图仍然是空的),但我不知道如何解决这个问题。

你能帮帮我吗?在返回之前,我必须做些什么来初始化视图?UITableView文档告诉我不要手动调用"loadView“...

提前谢谢你,马克。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-21 21:42:44

我必须向我的横断面图控制器添加一个NSString属性。在文本中,我将这个字符串赋给了UILabel viewDidLoad属性,现在它可以工作了。

票数 0
EN

Stack Overflow用户

发布于 2010-07-30 09:59:42

我在view = (null)中也遇到了同样的问题。这一切都是关于“代表”的。我的tableView工作得很好,我的所有UITableView委托方法都正常工作,但是viewForHeaderInSection:不能实现。

我发现Xcode允许我使用与TableView的弱链接引用进行构建,这对于"viewForHeaderInSection:“方法是不够的。

我还发现,使用这个弱引用,Xcode可以很容易地从viewForHeaderInSection:方法中推送一个“编码的”自定义视图,但是使用IB时,必须建立更多的链接。这需要更多的工作,但一旦你开始构建更复杂的对象,就会提供更好的体验。

我使用:NSLog([NSString stringWithFormat:@"%@", self.headerView]);来验证视图是否输出为(null)。

首先调用viewForHeaderInSection:方法,如果为nil或null,则tableView接着调用"titleForHeaderInSection:“。(您也可以利用这一点对您有利)。

确保您的设置是正确的,并且对对象之间的工作方式有意义。

适用于我的示例步骤:

(.h)

  1. 正确设置了viewController,并声明了tableView委派方法。我使用的是通用的UITableViewController,在复杂的TabBar和UINavigationControllers中对我不起作用。

@ YourViewController接口: UIViewController {

  • 创建将出现在视图上的所有IBOutlets:

*yourImageOnCustomView;

  • Assign *yourImageOnCustomView;

IBOutlet UITableView *myTableView;IBOutlet UIView *yourCustomHeaderView;IBOutlet UIImageView IBOutlet内存分配分配:@property(非原子,保留) UITableView *yourTableView;@property(非原子,保留) IBOutlet UIImageView *yourCustomHeaderView;@property(非原子,保留) IBOutlet UIImageView myTableView

(.m)

  1. 综合您的变量:

@ yourImageOnCustomView;

  • Implement yourTableView,yourCustomHeaderView,合成所有你的标准TableView委托所需的方法,加上:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {//初始化表头视图: UIView *tableView viewForHeaderInSection;//显示各行的表头: if (section == 0) {headerStatBar = self.yourCustomSectionHeaderView1;} if (section == 1) {headerView = self.yourCustomSectionHeaderView1;} if (section == 1) {headerView = self.yourCustomSectionHeaderView1;} //返回视图到表: return headerView;}

  • 在IB中建立所有连接,最简单的方式:

代码语言:javascript
复制
1. View your objects with the "LIST VIEW", provides better understanding and object hierarchy 
2. Right-Click your "File's Owner", to reveal all your IBOutlets; 
3. Drag all your IBOutlet connections from the File's Owner to the Object they control; i.e. (yourTableView -> tableView) or yourCustomHeaderView -> customized view that you designed) and (yourImage -> custom UIImageView that you dropped on your custom View.

现在连接已经建立,通过设置每个项目的任何属性,比如self.yourCustomHeaderView.background = [UIColor redColor]; etc....,您就可以“完全”控制每个项目的各个方面

**确保从" tableView“拖动到”文件的所有者“,以便将表的(委托)和(数据源)设置回文件的所有者;这恰好是所有tableView委托方法所在的位置!

这只是最简单的步骤,你可以根据需要使视图变得复杂,我的一个viewForHeaderInSection: views为所有视图提供了40+ IBoutets,包括按钮、图像、标签、其他视图等等……

我真的试着把所有的代码都放在“代码块”里,就是行不通,但你仍然可以读懂它。

票数 1
EN

Stack Overflow用户

发布于 2012-02-27 14:13:34

您的视图尚未加载。这就是为什么它是零的原因。在ViewDidLoad中修改代码。

我遇到了一个类似的问题,我试图在初始化标题后编辑标签值,但我发现标签都是空的。我通过调用标题视图控制器的viewDidLoad方法中的标签修改代码解决了这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3293501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档