我正在使用故事板在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
}
}
}
答案 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,当然:)