好的。在过去三年中,我完成的自定义 UITableViewCells 多得我数都数不过来。
然后是 iOS 5,我的办公 table 上刚好有一个项目需要做更多。
所以我以前这样做的方法是制作一个自定义 XIB,将 UITableViewCell 拖到 Canvas 上,插入我的控件,设置自定义类,进行链接...然后在代码中加载实例化单元格解压 XIB 后遍历对象。
做了这么多次,我只有一个类别函数来处理整个事情。
现在,在 iOS 5 中,每次我制作自定义单元格时,它都会突然提供空白的白色表格单元格。
以下是插入到表格中的自定义单元格的以下特征
1) 除了“默认”UITableViewCell 控件(textLabel 等将在我为它们设置文本时填充和显示)之外完全显示纯白色。
2) isKindOfClass(MyCustomCellClass) 报告为真
3) 自定义单元类上的 Setter 方法正在运行,设置值和自定义 UILabel 的对象指针以及所有报告为非零,这意味着单元实际上正在生成并从 XIB 正确实例化
4) 出于某种原因无条件地显示像 UIStepper 这样的另类控件。所以是的,如果我在我的自定义单元格中放置一个步进器,它会显示,但标签和图像不会显示。
据我所知,默认情况下某些东西会遮挡内容 View ,否则我创建的自定义控件不再适用于单元格的 contentView(就像以前一样),而只是被扔到外太空。
例如,在 iOS 4 XIB 中,我曾经在制作自定义单元格时看到这个(摘自 Apple 的 iOS 5 文档):
但就目前而言,这是我在 iOS 5 XIB 中执行相同操作时所看到的
因此请注意,它不再明确显示内容 View 中的那条小虚线。
在这个问题上我真的用尽了我所有的诊断知识。我试过在运行时手动将所有自定义标签直接抽取到内容 View 中,但即使这样也行不通。
我正在寻找任何想法。
编辑
加载XIB的代码
if (cell == nil)
{
[[NSBundle mainBundle] loadNibNamed:@"XCCodeViewCell" owner:self options:nil];
cell = codeCell;
self.codeCell = nil;
}
这是根据 Apple 较新的 iOS 5 建议对其进行简化后的当前状态。 XIB 已将其所有者正确设置为“self”类,并且 codeCell 已正确链接到具有正确类和标识符的单元格。
最佳答案
哇,这个花了我一段时间来测试,但我想我已经找到了答案...
在界面生成器中使用 Xcode4,他们添加了在界面生成器中静态设置 tableViewCells 的能力。当你想设计不会改变的 tableView 并且不想用代码编写它们时,这很酷。为了促进这一点,他们设置了在 IB 中设置 tableViewCell 样式并查看其外观的功能。当您使用自己的 subview 设计自己的单元格时,您选择“自定义”。
随着 iOS 5 的发展,我发现了以下内容;当我从 xib 加载一个单元格,然后以编程方式设置 textLabel.text 或其中一种标准单元格样式的另一个属性时,tableViewCell 似乎生成了带有默认标签的标准 View ,并用它覆盖了您的自定义 View 。因此,为了保留您的自定义单元格 subview ,您需要不访问任何标准 tableCell 的属性。
很酷。
iOS 4 中的另一个新功能是 UINib。您应该使用 UINib 从 xibs 加载 tableViewCells,因为它具有缓存并且速度更快(对您的 tableView 滚动来说更好)。 ARC 代码如下所示:
标题:
@property (nonatomic, strong) UINib * tableCellLoader;
.m文件:
-(void)viewDidLoad{
[super viewDidLoad];
self.tableCellLoader = [UINib nibWithNibName:@"MyTableViewCell" bundle:nil];
}
然后在 tableView:cellForRowAtIndexPath:
...
if (cell == nil) {
cell = [[self.tableCellLoader instantiateWithOwner:self options:nil] objectAtIndex:0];
}
...
编辑:更新 iOS 5 中的新功能
iOS 5 中的新功能是 UITableView 能够为某些单元格重用标识符保留 xib,然后在重用队列中没有任何单元格时实例化该特定类型的新单元格。
checkout
– registerNib:forCellReuseIdentifier:
然后当你这样做
– dequeueReusableCellWithIdentifier:
您一定会得到指定类型的 UITableViewCell。它节省了你自己做整个 UINib 的事情。
关于iphone - iOS 5 UITableViewCell 自定义 XIB 又名 "Am I losing my mind?",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8992346/
我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
我在新的Debian6VirtualBoxVM上安装RVM时遇到问题。我已经安装了所有需要的包并使用下载了安装脚本(curl-shttps://rvm.beginrescueend.com/install/rvm)>rvm,但以单个用户身份运行时bashrvm我收到以下错误消息:ERROR:Unabletocheckoutbranch.安装在这里停止,并且(据我所知)没有安装RVM的任何文件。如果我以root身份运行脚本(对于多用户安装),我会收到另一条消息:Successfullycheckedoutbranch''安装程序继续并指示成功,但未添加.rvm目录,甚至在修改我的.bas
我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些