我的iPhone应用程序中有一个分组样式的UITableView。现在,我想使用Image、label和activity indicator来自定义部分标题。
为此,我创建了一个新的XIB子类和一个UIViewController文件。我将UIImageView、UILabel和UIActivityIndicatorView作为IBOutlet属性添加到ViewController中,并将它们连接到我在Interface Builder中放入XIB中的控件。
在生成我的UITableView的类中,我设置了节标题(两个,都是上面定义的ViewController的实例),并设置了它们的属性(图像和文本)。然后在tableView委托中返回ViewControllers视图:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
if (section == 0) {
return [favoritesSectionHead view];
} else {
return [serverlistSectionHead view];
}
}这将显示我在Interface Builder中定义的视图,没有自定义图像和文本。我知道为什么会发生这种情况( ViewController的视图是在第一次需要的时候创建的,在我的代码中,这是当我在viewForHeaderInSection方法中返回它的时候-->当我试图设置自定义值时,视图仍然是空的),但我不知道如何解决这个问题。
你能帮帮我吗?在返回之前,我必须做些什么来初始化视图?UITableView文档告诉我不要手动调用"loadView“...
提前谢谢你,马克。
发布于 2010-07-21 21:42:44
我必须向我的横断面图控制器添加一个NSString属性。在文本中,我将这个字符串赋给了UILabel viewDidLoad属性,现在它可以工作了。
发布于 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)
@ YourViewController接口: UIViewController {
*yourImageOnCustomView;
IBOutlet UITableView *myTableView;IBOutlet UIView *yourCustomHeaderView;IBOutlet UIImageView IBOutlet内存分配分配:@property(非原子,保留) UITableView *yourTableView;@property(非原子,保留) IBOutlet UIImageView *yourCustomHeaderView;@property(非原子,保留) IBOutlet UIImageView myTableView
(.m)
@ yourImageOnCustomView;
-(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;}
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,包括按钮、图像、标签、其他视图等等……
我真的试着把所有的代码都放在“代码块”里,就是行不通,但你仍然可以读懂它。
发布于 2012-02-27 14:13:34
您的视图尚未加载。这就是为什么它是零的原因。在ViewDidLoad中修改代码。
我遇到了一个类似的问题,我试图在初始化标题后编辑标签值,但我发现标签都是空的。我通过调用标题视图控制器的viewDidLoad方法中的标签修改代码解决了这个问题。
https://stackoverflow.com/questions/3293501
复制相似问题