代码之家  ›  专栏  ›  技术社区  ›  Boon

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

  •  11
  • Boon  · 技术社区  · 15 年前

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

    你能剖析一下整个视图是如何完成的吗?该视图是使用uiTableView还是uiScrollView完成的?

    5 回复  |  直到 10 年前
        1
  •  11
  •   slf    13 年前

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

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

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

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

    另一种方法是在运行时动态生成UI小部件,而不使用XIB。这完全取决于您想要管理什么(代码或XIB),在我看来,这两种方式的工作量都差不多。我强烈建议阅读 table view programming guide 如果你还没有。

        2
  •  3
  •   Marco Valentin Shamardin    13 年前

    或者你可以使用苹果自己的abpersonviewcontroller:

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

    allowsediting属性指定用户是否可以编辑个人信息。

        3
  •  1
  •   iPhoneDollaraire    14 年前

    我的实现使用一个带有自定义头的uiTableView(对于“添加照片”和编辑名称等价物)和一个自定义页脚(对于“删除”等价物使用uiSegmentedControl黑客)。

        4
  •  0
  •   nall    15 年前

    你可以使用 F-Script 为了探索这个。这里有一个 screenshot 在浏览通讯簿时从F脚本浏览器。基本上,它看起来像许多自定义视图,这些视图都继承自nsview。

    自己动手:

    1. 从上面的链接下载f-script
    2. 按照extras/f-script anywhere目录中的说明附加到通讯簿
    3. 从“通讯簿”菜单中选择“f-script->打开对象浏览器”
    4. 单击“选择视图”
    5. 突出显示要浏览的通讯簿视图,然后单击它。
    6. 导航到你的心的内容。
        5
  •  0
  •   bprzemyslaw    10 年前

    为了向您展示这一方法,您可以为此目的子类UITableViewController,然后为了实现与联系人应用程序类似的编辑模式,您将:

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

      var cancelButton: UIBarButtonItem!
      
    2. 在viewdidload()中,将edit按钮作为右项添加到导航栏,并准备Cancel按钮以稍后将其作为左项添加。

      self.navigationItem.rightBarButtonItem = self.editButtonItem()
      self.cancelButton = UIBarButtonItem(title: "Cancel", style: .Plain, target: self, action: "cancelPressed:")
      
    3. 覆盖set editing(u: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时退出编辑模式。

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

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