iPhone联系人应用程序的详细信息视图是如何实现的
我想实现一个类似于苹果自己的联系人应用程序的详细视图的视图,其中显示姓名、电话号码、注释等及其编辑模式。
你能剖析一下整个视图是如何完成的吗?该视图是用 UITableView 还是 UIScrollView 完成的?
I would like to implement a view similar to the detail view of Apple's own Contacts app where it displays the name, phone number, note, etc. and its Edit mode.
Can you dissect how the whole view is done? Is that view done with a UITableView or a UIScrollView?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
联系人详细信息屏幕实际上很容易模仿。
从 UITableView 开始,并为其提供 UITableViewDataSource 和 UITableViewDelegate。您需要为要呈现的所有数据提供部分。这意味着 1 个用于自定义页眉,1 个用于自定义页脚(按钮/操作),以及大约 6 个左右的数据部分(一个部分用于电话号码,另一个部分用于电子邮件地址,依此类推)
。 ,需要从数据源提供多行来指示该部分有多少数据。对于每一行,UITableViewCell 可用于显示实际的联系人数据(传真标签/传真号码值等)。如果你愿意的话,你可以想象一下,但似乎没有必要。对于铃声之类的东西,您需要指定一个公开指示器。
对于页眉,您需要一个 UIImageView 和一个 UILabel,对于页脚,您需要一些 UIButton。您可以在 InterfaceBuilder 中创建 UITableViewCell 的子级,并在其中包含这些视图,然后像其他任何东西一样将其连接起来。您可以使用 NSBundle 从其他尚未加载的 xib 加载视图。
另一种方法是在运行时动态生成 UI 小部件,而不使用 xib。这完全取决于您想要管理的内容(代码或 xib),对我来说,无论哪种方式,工作量似乎都是相同的。我强烈建议阅读 表格视图编程指南(如果您还没有)。
The contact details screen is actually quite simple to mimic.
Start with a UITableView and provide it with a UITableViewDataSource and UITableViewDelegate. You'll need to provide sections for all the data you want to present. This means 1 for the custom header, 1 for the custom footer (buttons / actions), and approximately 6 or so sections for the data (one section for phone numbers, another for e-mail addresses, and so on)
Inside of each section, a number of rows need to be provided from your datasource to indicate how much data there is for that section. For each row, a UITableViewCell can be used to display the actual contact data (fax label / fax number value, etc). You can get fancy if you like, but there doesn't seem to be a need. For things like ringtone you'll need to specify a disclosure indicator.
For the header you'll need a UIImageView and a UILabel, for the footer you'll need a few UIButtons. You can create a child of UITableViewCell in InterfaceBuilder with these views inside of it and wire it up like anything else. You can use NSBundle to load views from other xibs that are not already loaded.
An alternative is to dynamically generate the UI widgets at runtime with no xibs. It all depends on what you would rather manage (code or xibs), to me it seems about the same amount of effort either way. I highly recommend reading through the table view programming guide if you haven't already.
或者您可以使用Apple自己的ABPersonViewController:
http: //developer.apple.com/library/ios/#documentation/AddressBookUI/Reference/ABPersonViewController_Class/Reference/Reference.html
allowedEditing 属性指定用户是否可以编辑人员信息。
Or you could use Apple's own ABPersonViewController:
http://developer.apple.com/library/ios/#documentation/AddressBookUI/Reference/ABPersonViewController_Class/Reference/Reference.html
The allowsEditing property specifies whether the user can edit the person’s information.
我的实现使用带有自定义标头(用于“添加照片”和编辑名称等效项)的 UITableView 和用于“删除”等效项的自定义页脚(使用 UISegmentedControl hack 作为一个大按钮)。
My implementation uses a UITableView with custom header (for the "Add Photo" and edit name equivalents) and a custom footer (using the UISegmentedControl hack for a big button) for the "Delete" equivalent.
您可以使用 F-Script 来探索这一点。这是 F-Script 浏览器的屏幕截图浏览地址簿。基本上,它看起来像很多自定义视图,它们都继承自 NSView。
要自己执行此操作:
You can use F-Script for exploring this. Here's a screenshot from the F-Script browser while browsing Address Book. Basically, it looks like a lot of custom views which all inherit from NSView.
To do this yourself:
只是为了向您展示方法,您可以为此目的对 UITableViewController 进行子类化,然后为了实现类似于联系人应用程序的编辑模式,您可以:
添加一个属性来存储对“取消”按钮的引用。
在 ViewDidLoad() 中,将编辑按钮添加到导航栏作为右侧项目,并准备取消按钮以便稍后将其添加为左侧项目。
重写 setEditing(_:animated:) 方法以将单元格设置为编辑/预览模式,并根据编辑标志显示/隐藏导航栏上的“取消”按钮。
重写 UITableViewDelegate 的 tableView(_:editingStyleForRowAtIndexPath:) 和 tableView(_:shouldIndentWhileEditingRowAtIndexPath:) 方法以在编辑模式下配置行样式和缩进。
实现cancelPressed方法以在按下“取消”时退出编辑模式。
我知道这个问题很老了,但有人可能会觉得它很有帮助。
Just to show you the way, you can subclass UITableViewController for that purpose and then in order to implement the Edit mode similar to the Contacts app you would:
Add a property to store a reference to Cancel button.
In ViewDidLoad(), add edit button to the navigation bar as a right item and prepare Cancel button to later add it as a left item.
Override setEditing(_:animated:) method to set up your cells for Edit/Preview mode and show/hide a Cancel button on the navigation bar, based on the editing flag.
Override UITableViewDelegate's tableView(_:editingStyleForRowAtIndexPath:) and tableView(_:shouldIndentWhileEditingRowAtIndexPath:) methods to configure row styles and indentation when in Edit mode.
Implement cancelPressed method to exit Edit mode when Cancel is pressed.
I know the question is pretty old, but somebody might find it helpful.