iPhone联系人应用程序的详细视图是如何实现的

iPhone联系人应用程序的详细视图是如何实现的,iphone,ios,cocoa-touch,uikit,abpersonviewcontroller,Iphone,Ios,Cocoa Touch,Uikit,Abpersonviewcontroller,我想实现一个类似于苹果自己的联系人应用程序的详细视图的视图,其中显示姓名、电话号码、便笺等及其编辑模式 你能分析一下整个视图是如何完成的吗?该视图是使用UITableView还是UIScrollView完成的?您可以使用该视图进行探索。下面是浏览通讯录时F-Script浏览器中的一个示例。基本上,它看起来像许多自定义视图,它们都继承自NSView 要自己做到这一点: 从上面的链接下载F-Script 按照extras/F-Script Anywhere目录中的说明附加到通讯簿 从通讯簿菜单中选择

我想实现一个类似于苹果自己的联系人应用程序的详细视图的视图,其中显示姓名、电话号码、便笺等及其编辑模式

你能分析一下整个视图是如何完成的吗?该视图是使用UITableView还是UIScrollView完成的?

您可以使用该视图进行探索。下面是浏览通讯录时F-Script浏览器中的一个示例。基本上,它看起来像许多自定义视图,它们都继承自NSView

要自己做到这一点:

从上面的链接下载F-Script 按照extras/F-Script Anywhere目录中的说明附加到通讯簿 从通讯簿菜单中选择F-Script->打开对象浏览器 单击“选择视图” 突出显示要浏览的通讯簿视图,然后单击它。 导航到你心满意足的地方。
我的实现使用带有自定义页眉的UITableView来添加照片和编辑姓名,使用UISegmentedControl hack来自定义页脚来删除相应的大按钮。

联系人详细信息屏幕实际上很容易模拟

从UITableView开始,并为其提供UITableViewDataSource和UITableViewDelegate。您需要为所有要显示的数据提供部分。这意味着1个用于自定义页眉,1个用于自定义页脚按钮/操作,以及大约6个用于数据的部分—一个用于电话号码,另一个用于电子邮件地址,依此类推

在每个部分内部,需要从数据源中提供许多行,以指示该部分有多少数据。对于每一行,都可以使用UITableViewCell来显示实际的联系人数据传真标签/传真号码值等。如果您愿意,您可以选择,但似乎不需要。对于像铃声这样的东西,你需要指定一个泄露指示器

对于页眉,您需要一个UIImageView和一个UILabel;对于页脚,您需要几个UIButton。您可以在InterfaceBuilder中创建UITableViewCell的子级,其中包含这些视图,并像其他任何东西一样将其连接起来。您可以使用NSBundle从尚未加载的其他XIB加载视图


另一种方法是在运行时不使用XIB动态生成UI小部件。这完全取决于您希望管理代码或XIB的内容,在我看来,这两种方式的工作量都差不多。如果您还没有阅读,我强烈建议您阅读。

或者您可以使用苹果自己的ABPersonViewController:


allowsEditing属性指定用户是否可以编辑此人的信息。

为了给您指路,您可以为此目的将UITableViewController子类化,然后为了实现类似于Contacts应用程序的编辑模式,您可以:

添加属性以存储对“取消”按钮的引用

var cancelButton: UIBarButtonItem!
在ViewDidLoad中,将“编辑”按钮作为右侧项目添加到导航栏,并准备“取消”按钮,以便稍后将其作为左侧项目添加

self.navigationItem.rightBarButtonItem = self.editButtonItem()
self.cancelButton = UIBarButtonItem(title: "Cancel", style: .Plain, target: self, action: "cancelPressed:")
Override setEditing\ uuux:animated:方法将单元格设置为编辑/预览模式,并根据编辑标志在导航栏上显示/隐藏取消按钮

override func setEditing(editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: true)

    if editing {
        // Set up cells and prepare for Edit mode here
        self.navigationItem.setLeftBarButtonItem(self.cancelButton, animated: true)
    } else {
        // Set up cells and prepare for Preview mode here
        self.navigationItem.setLeftBarButtonItem(nil, animated: true)
    }
}
重写UITableViewDelegate的tableView\u1:EditingStyleforRowatineIndexPath:和tableView\u1:ShouldinetWheedingRowatineIndexPath:方法,以便在编辑模式下配置行样式和缩进

执行cancelPressed方法以在按下Cancel时退出编辑模式

func cancelPressed(button: UIBarButtonItem) {
    self.setEditing(false, animated: true)
}

我知道这个问题已经很老了,但可能有人会觉得它很有用。

Hrm。尽管iPhone模拟器版本的MobileAddressBook是一个动态可执行文件,但在gdb中加载FScript包似乎不起作用。