【问题标题】:NSTableView update selected cell after searchNSTableView 搜索后更新选定的单元格
【发布时间】:2015-12-13 22:20:24
【问题描述】:

我有一些数据的 NSTableView。我想从 NSTableView 中获取所选单元格的名称。这在加载视图时有效,我只需单击它。 当我搜索表格并单击搜索的单元格时,选定的项目名称不会更新,它会在搜索表格之前显示该位置的单元格的值。 是 谁能指出我在搜索表时如何更新数组?将不胜感激任何cmets。干杯。

下面的一些代码显示了选定单元格名称的 text2 变量是如何派生的:

var menuItems = [mainMenuData(calculationType: "Steel", calculationName: "Simply supported beam", calculationtoCode: "EN1993, BS5950"),
                mainMenuData(calculationType: "Concrete", calculationName: "Pad Foundations", calculationtoCode: "EN1992, BS8110"),
                mainMenuData(calculationType: "Loading", calculationName: "Wind loading", calculationtoCode: "EN1994, BS5675"),
                mainMenuData(calculationType: "Timber", calculationName: "timber rafter", calculationtoCode: "EN1995, BS3453"),
                mainMenuData(calculationType: "Steel", calculationName: "Portal Frame analysis", calculationtoCode: "EN1993, BS5950"),
                mainMenuData(calculationType: "Foundations", calculationName: "Pad foundations", calculationtoCode: "EN1992, BS8110")]

@IBOutlet var menuController: NSArrayController!
@IBOutlet weak var statusLabel: NSTextField!
@IBOutlet weak var mainMenuTableView: NSTableView!
@IBOutlet weak var selectedCalc: NSTextField!      

func updateMainMenu(){
    let text : String
    let text2 : String
    let itemSelected = mainMenuTableView.selectedRowIndexes.count
    let selected = mainMenuTableView.selectedRow

    if (itemSelected == 0) {
        text = "\(menuItems.count) items"
        text2 = "nothing selected"
    }
    else
    {
        text = "\(itemSelected) of \(menuItems.count) selected"
        text2 = "selected \(menuItems[selected].calculationName)"
    }

    statusLabel.stringValue = text
    selectedCalc.stringValue = text2
}

func tableViewSelectionDidChange(notification: NSNotification) {
    updateMainMenu()

        }

@IBAction func searchChange(sender: AnyObject) {
    let searchString = sender.stringValue
    var predicate: NSPredicate? = nil
    if (searchString != ""){
        var dict: [String : AnyObject] = ["value" : searchString]
        predicate = searchPredicate.predicateWithSubstitutionVariables(dict)


    }
    menuController.filterPredicate = predicate

}

【问题讨论】:

  • 也许可以试试tableView.continuous = YES
  • @ProBlaster 谢谢。但是我在哪里实现呢?在 tableview 初始化中?

标签: swift cocoa swift2 nstableview


【解决方案1】:

menuController 的arrangedObjects 包含过滤后的对象。如果您确实绑定了选择索引,则 menuController 的 selectedObjects 包含选定的对象。

【讨论】:

  • 感谢以 0x00 格式打印对象,但是如何从排列对象中获取选定行和中间列的值?我找不到实现这一目标的方法。
  • menuController.arrangedObjects[selected].calculationName代替menuItems[selected].calculationName
  • 是的,我之前尝试过,但给出错误“'AnyObject' 类型的值没有成员'calculationName'。有什么理由吗?我将每列的绑定设置为 menuController。感谢您的帮助。
  • 很好解决了。 menuController.arrangedObjects[selected].valueForKey("calculationName")!获取更新后的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-19
  • 2013-05-25
  • 2010-10-28
相关资源
最近更新 更多