arrays - 变量行的索引路径

标签 arrays swift uitableview parse-platform nsindexpath

我正在使用带有原型(prototype)单元格的 UITableView。主要的 TableView 是 DiveDetails2VC,原型(prototype)单元通过 segue 基于 DiveItemViewController。

我需要保存以解析结果,并且只能保存第 0 行以进行解析。我不知道如何设置它以便发送在 TableView 中选择的任何行进行解析。我知道这是由 saveEntry 中的行引起的:

let indexPath = NSIndexPath(forRow: 0, inSection: 0)

但我不知道如何设置 forRow 语句以允许显示数组中的任何行。只有一节。

DiveItemViewController

class DiveItemViewController: UITableViewController, ItemDataProtocol
{

private let NumberOfSections: Int = 1

// MARK: - Public Properties

//
//  This property is an object that conforms to the ItemDataSelectedProtocol. We use it to call the
//  selectedItem method.
//
var itemDataSelectedDelegate: AnyObject?


private var itemData: Array<String> = Array<String>()


override func viewDidLoad()
{
    super.viewDidLoad()

    // Adds "+" to dive item selection so divers can add another item to the selected list

    navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: #selector(DiveItemViewController.AddItemButton(_:)))
}

override func didReceiveMemoryWarning()
{
    super.didReceiveMemoryWarning()
}

// ---------------------------------------------------------------------------------------------
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    let cell: UITableViewCell! = tableView.dequeueReusableCellWithIdentifier(Resource.DiveItemCell)

    if self.itemData.isEmpty == false
    {
        cell.textLabel?.text = itemData[indexPath.row]
    }

    parseItem = cell.textLabel!.text!

    return cell
}

override func numberOfSectionsInTableView(tableView: UITableView) -> Int
{
    return self.NumberOfSections
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
    return itemData.count
}

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
    {

        tableView.cellForRowAtIndexPath(indexPath)?.accessoryType = UITableViewCellAccessoryType.Checkmark
        if self.itemDataSelectedDelegate?.respondsToSelector(#selector(DiveDetails2VC.itemDataSelectedItem(_:))) != nil
        {
            (self.itemDataSelectedDelegate as! ItemDataSelectedProtocol).itemDataSelectedItem(indexPath.row)
        }
        tableView.deselectRowAtIndexPath(indexPath, animated: true)
    }

override func tableView(tableView: UITableView, willDeselectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath?
{
    tableView.cellForRowAtIndexPath(indexPath)?.accessoryType = UITableViewCellAccessoryType.None

    return indexPath
}

func appendData(data: Array<String>) {

}


@IBAction func saveEntry (sender: AnyObject) {

    let indexPath = NSIndexPath(forRow: 0, inSection: 0)
    let cell = tableView.cellForRowAtIndexPath(indexPath)

    let updateDivelog2Query = PFQuery(className: "divelog")
    updateDivelog2Query.whereKey("uuid", equalTo: diveUUID)
    updateDivelog2Query.getFirstObjectInBackgroundWithBlock {(objects: PFObject?, error: NSError?) -> Void in

        if let updateDivelog2Object = objects {

            updateDivelog2Object.setValue (self.itemData[indexPath.row], forKey: cell!.textLabel!.text!)

            updateDivelog2Object.pinInBackground()
            updateDivelog2Object.saveInBackgroundWithBlock {(done:Bool, error:NSError?) in

                if done {
                    print ("ParseData UPDATED data saved")

                } else {
                    updateDivelog2Object.saveEventually()
                }
            }}}


}

func itemTitle(title: String)
{
    self.navigationItem.title = title
}

@IBAction func AddItemButton (sender: AnyObject) {


    let alert = UIAlertController(title: "Add item",
                                  message: "Add a new Item to your list",
                                  preferredStyle: .Alert)

    let saveAction = UIAlertAction(title: "Save",
                                   style: .Default,
                                   handler: { (action:UIAlertAction) -> Void in

                                    let textField = alert.textFields!.first
                                    self.itemData.append(textField!.text!)
                                    self.tableView.reloadData()
                                    self.appendData(self.itemData)

    })

         let cancelAction = UIAlertAction(title: "Cancel",
                                     style: .Default) { (action: UIAlertAction) -> Void in
    }

         alert.addTextFieldWithConfigurationHandler {
        (textField: UITextField) -> Void in
    }

         alert.addAction(saveAction)
         alert.addAction(cancelAction)

         presentViewController(alert,
                          animated: true,
                          completion: nil)

     tableView.reloadData()

}


func itemData(data: Array<String>)
{
    self.itemData = data
}
}

最佳答案

在您的 viewController 中声明一个 var:

var selectedIndexPath: NSIndexPath?

然后在您的 didSelectRowAtIndexPath 中,使用所选的 indexPath 设置此 var,例如:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
    if let _ = self.selectedIndexPath {
        selectedIndexPath = indexPath
    }else{
        selectedIndexPath = NSIndexPath(forRow: indexPath.row, inSection: indexPath.section)
    }
    tableView.cellForRowAtIndexPath(indexPath)?.accessoryType = UITableViewCellAccessoryType.Checkmark
    if self.itemDataSelectedDelegate?.respondsToSelector(#selector(DiveDetails2VC.itemDataSelectedItem(_:))) != nil
    {
        (self.itemDataSelectedDelegate as! ItemDataSelectedProtocol).itemDataSelectedItem(indexPath.row)
    }
    tableView.deselectRowAtIndexPath(indexPath, animated: true)
}

然后在您的saveEntry 方法中使用此selectedIndexPath:

@IBAction func saveEntry (sender: AnyObject) {   
    if let indexPath = selectedIndexPath {
       let cell = tableView.cellForRowAtIndexPath(indexPath)
       ...
    } 
}

编辑:在“inSection: indexPath.section)”后面添加了“)”

关于arrays - 变量行的索引路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39149777/

相关文章:

c - 使用一维数组对 C 中的矩阵进行转置

java - 程序给出数字而不是*

ios - Corebluetooth 使用 Swift 获取设备名称

ios - 面向 TDD 初学者的 Swift 单元测试

ios - 在自定义 UITableViewCell 中访问 subview

Java 比较器 Arrays.sort()

swift - 从 swift 访问 api 网关端点时出现 "unsupported URL"错误

swift - 从 Firebase 下载数据到 Xcode UITableView

ios - 如何取消选中tableView中的选中行

python - python-numpy 矩阵中的像素平均值