如何以编程方式从情节提要中填充静态 UITableView?
Posted
技术标签:
【中文标题】如何以编程方式从情节提要中填充静态 UITableView?【英文标题】:How to programmatically populate a static UITableView from the storyboard? 【发布时间】:2016-09-09 18:53:39 【问题描述】:我正在尝试创建一个类似于 ios 设置的 关于 部分的 UITableView。我有我的初始表格视图,我动态填充(已经工作),并且每个项目都有披露指标。当我单击此视图中的某个项目时,我告诉导航控制器滑到静态 UITableView(如下图所示)。我使用它的 ID 从情节提要中实例化静态表视图,并且在转换到它之前,我想根据它从初始表视图中描述的项目用动态值填充它。基本上,如何在我的代码的静态表格视图中设置单元格的 Right Detail 部分。?
我正在寻找的伪代码是这样的(存在于初始表视图的控制器类中):
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
let customData: [String:String] = getDataForCell(atIndexPath: indexPath)
let descriptionView = storyboard?.instantiateViewControllerWithIdentifier("keyDetails") as! KeyDetailsController
descriptionView.getCell(forRow: 0, inSection: 0).rightDetail.text = customData["serverName"]! // changes "A Fake Server" to an actual server name
【问题讨论】:
只需创建对这些标签的IBOutlet
引用,然后更新这些网点的text
属性。
@Rob 我已经试过了。我为静态“About”表视图创建了一个控制器类并将它们转换为该控制器类,并为列出的每个详细信息填充了 IBOutlets。但是,IBOutlets 在运行时总是nil
。
@Rob 我认为这是因为这不是静态表视图应该使用的方式(似乎它们只打算与情节提要中设置的值一起使用)。跨度>
那是因为您在实例化视图控制器后立即尝试使用这些插座,而不是等待目标控制器的视图被加载(例如,直到 @987654327 之后您才能引用插座@ 在该目标场景中被调用,这通常发生在稍后,在呈现/显示该场景的过程中)。另外,顺便说一句,如果您有 IBOutlet
从单元格直接到视图控制器的引用,那么您不需要这样做 getCell
的东西。如果你愿意,你可以,但它比它需要的更复杂。
@Rob 谢谢!是的,我最初有诸如serverName
之类的网点,并称为descriptionView.serverName.text = <some String>
。我没有想到视图可能还没有加载的事实。无论如何我可以强制视图加载一个我从情节提要获得参考的视图吗?我宁愿不要弄得乱七八糟,而是在实例化后立即处理表填充。另外,如果你写的是答案而不是评论,我会选择它。
【参考方案1】:
总结一下我们在聊天中的讨论:要更新这些标签,您只需创建IBOutlet
对标签的引用。
这里的关键问题是您试图在实例化视图控制器后立即更新这些插座。但是在加载视图之前不会配置出口,这是在转换到新场景的过程中发生的事情。所以你应该:
在目标控制器中创建String
(或其他)属性;
在实例化视图控制器后填充这些属性。在哪里执行此操作取决于您如何过渡到下一个场景:
如果以编程方式(通过showViewController
、presentViewController
或navigationController.pushViewController
)转换到下一个场景,则在调用instantiateViewControllerWithIdentifier
后立即设置这些;或
如果使用 segue,请在 prepareForSegue
中设置这些 String
属性。
在目标视图控制器的viewDidLoad
中,获取这些String
属性并更新您拥有`IBOutlet 引用的控件。
有关详细信息,请参阅Passing Data between View Controllers。
【讨论】:
以上是关于如何以编程方式从情节提要中填充静态 UITableView?的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式使用另一个视图中的按钮从情节提要中打开 UIViewController?
如何以编程方式更改使用自动布局在情节提要上创建的 UIImageView 的大小?
当我以编程方式从情节提要加载窗口时,为啥在 NSView 中未调用 drawRect?
以编程方式设置 rootViewController 不起作用,仅在 Xcode 11 中从情节提要中选择初始视图控制器