如何从UITableView应用程序的详细信息视图中删除当前行?

时间:2015-03-04 05:09:51

标签: ios uitableview swift storyboard uitoolbar

我正在使用故事板在Swift中开发一个UITableView应用程序。我的应用程序有两个视图控制器:MasterViewController和DetailViewController。

我正在尝试复制Apple的Notes应用程序的行为。在Apple的Notes应用程序中,当用户单击详细信息视图中显示的“垃圾栏按钮”项时,应用程序会显示一个操作表,其中包含两个选项:"删除注释"和"取消"。如果用户点击"删除注释",详细信息视图的当前内容淡出,则删除当前行,并且下一行的内容淡入。

我在详细视图中添加了一个带有垃圾栏按钮项的工具栏。当用户单击“废纸篓栏”按钮并能够显示“操作表”时,我可以调用DetailViewController的方法。我无法使视图的当前内容淡出并被下一行的内容替换。

我该怎么做?

以下是填充详细信息视图的代码:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "showDetail" { 
        if let indexPath = self.tableView.indexPathForSelectedRow() { 
           let object = objects[indexPath.row] as Note 
           println("setting detailItem! row: ", indexPath.row) 
           (segue.destinationViewController as DetailViewController).detailItem = object 
           (segue.destinationViewController as DetailViewController).delegate = self 
        } 
    } 
}

1 个答案:

答案 0 :(得分:0)

你可以非常直截了当地在DetailViewController创建一个特殊的setter:

func setDetailItem(newItem: AnyObject, animated:Bool)
{
    if animated
    {
        UIView.animateWithDuration(0.3, animations: {
            <yourtextview>.alpha = 0.0
            },
            completion: {(finished:Bool) -> Void in
            self.detailItem = newItem
            <yourtextview>.alpha = 1.0   // back to visible state instantly

        })
    }
    else
    {
        self.detailItem = newItem
    }
}

然后在MasterViewController中添加布尔标志(例如,名为isDeletion)并在删除按钮点击处理程序中将其设置为true。然后改变你的prepareForSegue

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "showDetail" { 
        if let indexPath = self.tableView.indexPathForSelectedRow() { 
           let object = objects[indexPath.row] as Note 
           println("setting detailItem! row: ", indexPath.row) 
           // previous code
           //(segue.destinationViewController as DetailViewController).detailItem = object 
           // new code
           if isDeletion
           {
               isDeletion = false   // don't forget to clear the flag
               controller.setDetailItem(object, animated: true)
           }
           else
           {
               controller.setDetailItem(object, animated: false)
           }
           (segue.destinationViewController as DetailViewController).delegate = self 
        } 
    } 
}

现在文本应该在删除后淡出,并在简单选择后立即更改。 闻起来有点像Objective-C-ish,当然:)