首页 iOS.& Swift Books iOS.Apprentice

14
编辑项目 由Eli Ganim撰写

将新项目开奖结果3d到列表中是应用程序的一个很大的一步,但是通常有三件应用程序需要使用数据:

  1. 开奖结果3d新项目(您解决的问题)。
  2. 删除项目(您允许使用滑动删除)。
  3. 编辑现有项目(UHH ...)。

当您希望从列表中重命名项目时,最后一个有用的是,我们都制作拼写错误。

本章涵盖以下内容:

  • 编辑项目:通过App接口编辑现有的待办事项。
  • 重构代码:使用Xcode的内置重构功能来重命名代码以轻松识别。
  • 还有一件事:使用查找导航器的代码重构后修复已错过的代码更改。

编辑项目

您可以制作一个完全新的编辑项目屏幕,但它是不必要的工作重复 - 编辑屏幕余公司主要与开奖结果3d项目屏幕相同。唯一的区别是它不会启动空 - 相反,它适用于现有的待办事项。

So, let’s re-use the Add Item screen and make it capable of editing an existing ChecklistItem object.

编辑待办事项
编辑待办事项

For the edit option, when the user presses Done, you won’t have to make a new ChecklistItem object, instead, you will simply update the text in the existing ChecklistItem.

你’ll also tell the delegate about these changes so that it can update the text label of the corresponding table view cell.

锻炼:您需要在开奖结果3d项目屏幕上进行哪些更改以使其能够编辑现有项目?

回答:

  1. 必须更改屏幕标题 编辑项目.
  2. 你 must be able to pass it an existing ChecklistItem object.
  3. 你 have to place the ChecklistItem’s text into the text field.
  4. When the user presses Done, you should not add a new ChecklistItem object, but instead, update the existing one.

有一点的用户界面的问题,但...如何将用户实际打开编辑项目屏幕?在许多应用程序是通过点击该项目的排完成,但在 清单 已打开或关闭复选标记。

为了解决这个问题,你必须先修改UI。

修改UI以允许编辑

当一行给出两个函数时,标准方法是使用a 详细披露按钮 对于二级任务:

详细信息披露按钮
NKA Zoriex Givzhenune Yotgod

新的复选标记

➤拖动一个新的 标签 在单元格上并将其放在文本标签的左侧。给它以下属性:

表情符号& Symbols palette
BSA Esewa.& Fjnvabt jixucwu

原型细胞的新设计
szu niw rumocj好的sdi htimucjka megd

func configureCheckmark(for cell: UITableViewCell,
                       with item: ChecklistItem) {
  let label = cell.viewWithTag(1001) as! UILabel

  if item.checked {
    label.text = "√"
  } else {
    label.text = ""
  }
}
复选标记现在位于单元格的另一边
Bzi Kwojwpetcz Ove Bug US Qji Owlon Sujo EZ YGA Qugc

编辑屏幕segue

接下来,您将打开“详细信息”按钮打开“开奖结果3d/编辑项目”屏幕。这很简单,因为界面构建器还允许您为披露按钮进行SEGUE。

从细节披露按钮中制作SEGUE
Wedudh a cuyea bnuv nzi vapooj nalmpunefu raghaz

两个segues的两个箭头
Sto Ukruny新ksa Vejoap

更新开奖结果3d项目屏幕以处理编辑

➤ Add a new property for a ChecklistItem object below the other instance variables in AddItemViewController.swift.:

var itemToEdit: ChecklistItem?
override func viewDidLoad() {
  . . .
  if let item = itemToEdit {
    title= "编辑项目"
    textField.text = item.text
  }
}

如果让我们

你 cannot use optionals like you would regular variables. For example, if viewDidLoad() had the following code:

    textField.text = itemToEdit.text
如果让我们 temporaryConstant = optionalVariable {
  // temporaryConstant now contains the unwrapped value of the
  // optional variable. temporayConstant is only available from
  // within this if block
}
如果让我们 itemToEdit = itemToEdit {
  title= "编辑项目"
  textField.text = itemToEdit.text
}

设置要编辑的项目

➤ Change prepare(for:sender:) in checklistviewcontroller.swift. to the following:

override func prepare(for segue: UIStoryboardSegue,
                         sender: Any?) {
  if segue.identifier == "AddItem" {
    . . .

  } else if segue.identifier == "EditItem" {
    let controller = segue.destination
                     as! AddItemViewController
    controller.delegate = self

    if let indexPath = tableView.indexPath(
                          for: sender as! UITableViewCell) {
      controller.itemToEdit = items[indexPath.row]
    }
  }
}
如果让我们 indexPath = tableView.indexPath(
                      for: sender as! UITableViewCell){
  controller.itemToEdit = items[indexPath.row]
}

在视图控制器之间发送数据

We’ve talked about screen B (the Add/Edit Item screen) passing data back to screen A (the Checklists screen) via delegates. But here, you’re passing a piece of data the other way around – from screen A to screen B – namely, the ChecklistItem to edit.

编辑项目
Adebutr Ig Odom.

启用DONED按钮进行编辑

一个小问题:在导航栏上完成按钮最初是被禁用。这是因为您最初将其设置在故事板禁用。

override func viewDidLoad() {
  super.viewDidLoad()

  if let item = itemToEdit {
    title= "编辑项目"
    textField.text = item.text
    doneBarButton.isEnabled = true    // add this line
  }
}

处理委托协议中的编辑

➤ Add the following line to the protocol section in AddItemViewController.swift.:

func addItemViewController(_ controller: AddItemViewController,
                  didFinishEditing item: ChecklistItem)
protocol AddItemViewControllerDelegate: class {
  func addItemViewControllerDidCancel(
                 _ controller: AddItemViewController)
  func addItemViewController(
                 _ controller: AddItemViewController,
                 didFinishAdding item: ChecklistItem)
  func addItemViewController(
                _ controller: AddItemViewController,
                didFinishEditing item: ChecklistItem)
}
@IBAction func done() {
  if let item = itemToEdit {
    item.text = textField.text!
    delegate?.addItemViewController(self,
                  didFinishEditing: item)    
  } else {
    let item = ChecklistItem()
    item.text = textField.text!
    delegate?.addItemViewController(self, didFinishAdding: item)
  }
}

实现新的委托方法

➤尝试构建应用程序。它不起作用。

Xcode警告不完整的实施
Lwuga Gebvp Osaet Abmohrcehe Alkwuwezzukair

func addItemViewController(
              _ controller: AddItemViewController,
     didFinishEditing item: ChecklistItem) {
  if let index = items.firstIndex(of: item) {
    let indexPath = IndexPath(row: index, section: 0)
    if let cell = tableView.cellForRow(at: indexPath) {
      configureText(for: cell, with: item)
    }
  }
  navigationController?.popViewController(animated:true)
}
如果让我们 index = items.firstIndex(of: item) {
新Xcode错误
Col Mxoze Iqzaw.

class ChecklistItem: NSObject {

重构代码

此时,您有一个应用程序可以使用组合的开奖结果3d/编辑项目屏幕开奖结果3d新项目并编辑现有项目。相当甜蜜!

重命名视图控制器

大多数ides(或 Integrated. D发动 EXcode等非环境有一个名为的功能 重构,它允许您安全地更改整个项目中的类,方法或变量的名称。不幸的是,Xcode中的重构功能几年没有正常工作了几年。

Xcode上下文菜单
楚cjaha lizjuxt sure

Xcode重命名视图
mvule tagacu duiy.

Xcode实时重命名
Msono toik-yodo gujiguyw

在重构后测试代码

让我们看看一切是否正常工作。

还有一件事

重命名过程似乎已完美无瑕,您的应用程序在测试时工作正常,并且没有崩溃。所以,一切都应该很好,你可以继续进入应用程序中的下一个功能,对吗?

重命名后,协议名称没有更改
CFI ZKEDOCOP BALO QAG NUJ DJAQPOD IDTIK FODIMENX

搜索& replace options
YVA Ruurwg.& suxkute uxhoifz

搜索results
lga xoocjw tuqenbr.

结果列表允许您验证每种匹配项
BCU VAQIZHF BAMK OCVEHS LEO QO VEPIBB AOKS BIWRF

迭代发育

如果你认为认为Tu的发展方法我们已经看到了很多凌乱,那么你绝对是对的。你开始了一个设计,但随着你继续发展,你发现了DUD在练习中不太成功的东西,几次到芬德的作品。这是实际情况,软件开发如何在实践中如何。

有一个技术问题?想报告一个错误吗? 您可以向官方书籍论坛中的书籍作者提出问题和报告错误 这里.

有反馈分享在线阅读体验吗? 如果您对UI,UX,高亮反馈,或者我们的在线读者的其他功能,你可以将它们发送给设计团队与下面的表格:

© 2021 Razeware LLC

您可以免费读取,本章的部分显示为 混淆了 文本。解锁这本书,以及我们整个书籍和视频目录,带有Raywenderlich.com的专业订阅。

现在解锁

要突出或记笔记,您需要在订阅中拥有这本书或自行购买。