发现自己处于同样的境地:想尽可能多地使用绑定(尽量减少胶水代码的数量),并且仍然能够添加特定于我的应用程序的小块逻辑。
我有一个 NSTableView,它在其每一行上都显示一个删除按钮。删除按钮连接到我的 NSViewController 子类上的 IBAction。该表已正确绑定到 NSArrayController(通过 IB 在我的 Storyboard 中完成)。我还想要一个关于行删除的动画。
我正在使用 swift(但我认为将其转换为objective-c 应该非常简单)。我让它与绑定一起工作的唯一方法是使用计时器来延迟从 NSArrayController 中删除对象(使用下面的半秒延迟 - 更改它以满足您的需要):
import Cocoa
class ProjectsController: NSViewController {
@IBOutlet var arrayController: NSArrayController!
@IBOutlet weak var tableView: NSTableView!
@IBAction func deleteRow( object: AnyObject ) {
let row = tableView.rowForView( object as! NSView )
if ( row > -1 ) {
let indexSet = NSIndexSet( index:row )
tableView.removeRowsAtIndexes( indexSet, withAnimation: NSTableViewAnimationOptions.EffectFade )
NSTimer.scheduledTimerWithTimeInterval( 0.5, target: self, selector: "rowDeleted:", userInfo: row, repeats: false )
}
}
func rowDeleted( timer:NSTimer ) {
let row = timer.userInfo as! Int
arrayController.removeObjectAtArrangedObjectIndex( row )
}
}