【问题标题】:How is iPhone Contact app's detail View implementediPhone Contact 应用的详细视图是如何实现的
【发布时间】:2010-12-04 11:04:21
【问题描述】:

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

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

【问题讨论】:

    标签: iphone ios cocoa-touch uikit abpersonviewcontroller


    【解决方案1】:

    只是为了向您展示方法,您可以将 UITableViewController 子类化,然后为了实现类似于联系人应用程序的编辑模式:

    1. 添加一个属性来存储对取消按钮的引用。

      var cancelButton: UIBarButtonItem!
      
    2. 在 ViewDidLoad() 中,将编辑按钮添加到导航栏作为右侧项,并准备取消按钮稍后将其添加为左侧项。

      self.navigationItem.rightBarButtonItem = self.editButtonItem()
      self.cancelButton = UIBarButtonItem(title: "Cancel", style: .Plain, target: self, action: "cancelPressed:")
      
    3. 重写 setEditing(_: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)
          }
      }
      
    4. 在编辑模式下重写 UITableViewDelegate 的 tableView(_:editingStyleForRowAtIndexPath:) 和 tableView(_:shouldIndentWhileEditingRowAtIndexPath:) 方法来配置行样式和缩进。

    5. 实现cancelPressed方法,当按下Cancel时退出Edit模式。

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

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

    【讨论】:

      【解决方案2】:

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

      从一个 UITableView 开始,并为它提供一个 UITableViewDataSource 和 UITableViewDelegate。您需要为要呈现的所有数据提供部分。这意味着 1 个用于自定义页眉,1 个用于自定义页脚(按钮/操作),大约 6 个部分用于数据(一个部分用于电话号码,另一个用于电子邮件地址,等等)

      在每个部分的内部,需要从数据源中提供一些行来指示该部分有多少数据。对于每一行,一个 UITableViewCell 可用于显示实际的联系人数据(传真标签/传真号码值等)。如果你愿意,你可以变得花哨,但似乎没有必要。对于铃声之类的内容,您需要指定披露指示符。

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

      另一种方法是在运行时动态生成 UI 小部件,无需 xib。这完全取决于您更愿意管理什么(代码或 xibs),在我看来,无论哪种方式都需要付出相同的努力。如果您还没有阅读过table view programming guide,我强烈建议您阅读。

      【讨论】:

        【解决方案3】:

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

        http://developer.apple.com/library/ios/#documentation/AddressBookUI/Reference/ABPersonViewController_Class/Reference/Reference.html

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

        【讨论】:

          【解决方案4】:

          我的实现使用带有自定义标题(用于“添加照片”和编辑名称等效项)的 UITableView 和用于“删除”等效项的自定义页脚(对大按钮使用 UISegmentedControl hack)。

          【讨论】:

            【解决方案5】:

            您可以使用F-Script 进行探索。这是浏览地址簿时来自 F-Script 浏览器的screenshot。基本上,它看起来像很多都继承自 NSView 的自定义视图。

            要自己做:

            1. 从上面的链接下载 F-Script
            2. 按照 extras/F-Script Anywhere 目录中的说明附加到通讯簿
            3. 选择 F-Script -> 从通讯簿菜单中打开对象浏览器
            4. 点击选择视图
            5. 突出显示您要浏览的通讯簿视图并单击它。
            6. 随心所欲地导航。

            【讨论】:

            • 人力资源部。即使 iPhone 模拟器版本的 MobileAddressBook 是动态可执行文件,在 gdb 中加载 FScript 包似乎也不起作用。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-01-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-10-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多