UICollection查看单元格未在索引路径中删除

时间:2017-09-28 18:56:55

标签: swift struct uicollectionview

我正在使用集合视图来显示结果。我想在选择该单元格时删除特定单元格。为了保留所选单元格的记录,我正在使用struct.Everything正常工作。但是当我点击删除按钮时,所选单元格没有被删除。其他一些单元格被删除。但是当我回到上一个屏幕并再次返回时,我想要删除的单元格实际上被删除了。我不知道为什么以及如何发生这种情况?

import UIKit
import GRDBCipher

class AdvisoryViewController: 
UIViewController,UICollectionViewDelegate,UICollectionViewDataSource {

@IBOutlet weak var new_advisory_label: UILabel!
var getname=String()

var array=[String]()
var date_array=[String]()
var crop_code:String=""
var dbQueue:DatabaseQueue? = nil

 var ss = [Int]()
var struct_array :[myObject] = []
var msg_stat:[oldMsg] = []


var msg_count_array=[Int]()
var msg_array=[String]()
var selected_date_array=[String]()
var srno_array=[String]()
var selected_srno_array=[String]()

@IBOutlet weak var collection_view: UICollectionView!

struct myObject
{
    var date: String
    var advisory:String
    var status: String
    var srno: String
}

struct oldMsg
{
    var is_checked: Bool

   }

override func viewDidLoad() {
    super.viewDidLoad()


    do{
        let longpress1=UILongPressGestureRecognizer(target: self, action: #selector(longpress))
        // longpress1.minimumPressDuration=1
        collection_view.addGestureRecognizer(longpress1)


        let 
path=NSSearchPathForDirectoriesInDomains(.documentDirectory,.userDomainMask,
true).first!


         dbQueue = try DatabaseQueue(path: "\(path)/pest_messenger.sqlite")
        try dbQueue?.inDatabase { db in
            let crop_sursor = try Row.fetchCursor(db, "SELECT * FROM crop_master where crop_name='\(getname)'")
            while let row = try crop_sursor.next() {
                let  title: String = row.value(named: "srno")

                crop_code=title
               }



            let rows = try Row.fetchCursor(db, "SELECT distinct brief_advisory,advisory_date,srno FROM crop_insect_advisory_issued where crop_code='\(crop_code)'")
            while let row = try rows.next() {
                let  title: String = row.value(named: "brief_advisory")
                let da:String=row.value(named:"advisory_date")
                let srno:Int = row.value(named:"srno")
                let date_f=DateFormatter()
                date_f.dateFormat="yyyy-MM-dd"
                let d=date_f.date(from: da)
                date_f.dateFormat="dd-MM-yyyy"
                let dd=date_f.string(from: d!)
                array.append(title)
                date_array.append(dd)
                srno_array.append("\(srno)")

                }

        }


        for i in 0 ..< array.count
        {

  struct_array.append(myObject(date:date_array[i],advisory:array[i],
  status:"N",srno:srno_array[i]))
        }

        for i in 0 ..< array.count

        {
            msg_stat.append(oldMsg(is_checked: false))
        }
     collection_view.delegate = self
        collection_view.dataSource = self
    }catch{
        print(error)
    }

}



func collectionView(_ collectionView: UICollectionView, 
 numberOfItemsInSection section: Int) -> Int {
    return array.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt 
indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: 
  "AdvisoryCollectionViewCell", for: indexPath) as! 
AdvisoryCollectionViewCell

    cell.msg_label.text = struct_array[indexPath.item].advisory
     cell.date_label.text = struct_array[indexPath.item].date


    let imagee = UIImage.init(named: "rsz_tick")
    cell.check_image.image = imagee
    cell.check_image.isHidden =  true

    if( msg_stat[indexPath.row].is_checked == false){
        cell.check_image.isHidden = true

        }
    else   if(msg_stat[indexPath.row].is_checked == true)
    {
        cell.check_image.isHidden = false


    }
    else{

    }
    return cell
    }

  func longpress(gestureRecognizer: UIGestureRecognizer)
{

    let righbarButton = UIBarButtonItem(image: UIImage(named: 
  "rsz_delete")?.withRenderingMode(.alwaysOriginal), style: 
 UIBarButtonItemStyle.plain, target: self, action: 
 #selector(myRightTapped(sender:)))

    self.navigationItem.rightBarButtonItem = righbarButton


    let longpress = gestureRecognizer as! UILongPressGestureRecognizer
    let state = longpress.state
    let locationInview = longpress.location(in: collection_view)
    var indexpath=collection_view.indexPathForItem(at: locationInview)



    if(gestureRecognizer.state == UIGestureRecognizerState.began)
    {
        let cell = collection_view.cellForItem(at: indexpath!) as! 
  AdvisoryCollectionViewCell

        cell.check_image.isHidden =  false
        msg_stat[(indexpath?.row)!].is_checked = true
        ss.append((indexpath?.item)!)
        print("index of deleting = \(indexpath?.item)")
        msg_count_array.append((indexpath?.item)!)
        msg_array.append(struct_array[(indexpath?.item)!].advisory)
  selected_date_array.append(struct_array[(indexpath?.item)!].date)
    selected_srno_array.append(struct_array[(indexpath?.item)!].srno)
    }


}


func collectionView(_ collectionView: UICollectionView, didSelectItemAt 
  indexPath: IndexPath) {
    let cell = collection_view.cellForItem(at: indexPath) 
   as!AdvisoryCollectionViewCell

    if(!(ss.isEmpty)){
        cell.check_image.isHidden =  !cell.check_image.isHidden

        if(cell.check_image.isHidden == true)
        {
            msg_stat[indexPath.row].is_checked = false
            print("why removing.....")
            if(!(msg_count_array.isEmpty)){
                msg_count_array.remove(at: (indexPath.item))}
            if(!(msg_array.isEmpty)){
                msg_array.remove(at: (indexPath.item))
            }
            if(!(selected_srno_array.isEmpty))
            {
                 selected_srno_array.remove(at: (indexPath.item))
            }
            if(!(selected_date_array.isEmpty))
            {
                 selected_date_array.remove(at: (indexPath.item))
            }
        }
        else{
            msg_stat[indexPath.row].is_checked = true

            msg_count_array.append((indexPath.item))
            msg_array.append(array[(indexPath.item)])
             selected_srno_array.append(struct_array[(indexPath.item)].srno)
        }
     }
   }

 func  myRightTapped(sender:UIBarButtonItem!)
{

do{

for i in 0 ..< msg_count_array.count

{
   struct_array.remove(at: i)
    msg_stat.remove(at: i)

}

msg_count_array.removeAll()

  for i in 0 ..< msg_array.count

{

var msg = msg_array[i]

    var srno = selected_srno_array[i]
let 
path=NSSearchPathForDirectoriesInDomains(.documentDirectory,.userDomainMask,
true).first!


let dbQueue = try DatabaseQueue(path: "\(path)/pest_messenger.sqlite")
try dbQueue.inDatabase { db in

 try db.execute("DELETE  FROM crop_insect_advisory_issued where srno='\
(srno)'")

}
}
 msg_array.removeAll()
  array.removeAll()
  date_array.removeAll()
    srno_array.removeAll()


//  let dbQueue = try DatabaseQueue(path: "\(path)/p_messenger.sqlite")
try dbQueue?.inDatabase { db in

let rows = try Row.fetchCursor(db, "SELECT distinct brief_advisory,advisory_date,srno FROM crop_insect_advisory_issued where crop_code='\(crop_code)'")
while let row = try rows.next() {
let  title: String = row.value(named: "brief_advisory")
let da:String=row.value(named:"advisory_date")
    let srno:Int = row.value(named:"srno")
let date_f=DateFormatter()
date_f.dateFormat="yyyy-MM-dd"
let d=date_f.date(from: da)
date_f.dateFormat="dd-MM-yyyy"
let dd=date_f.string(from: d!)
array.append(title)
date_array.append(dd)
    srno_array.append("\(srno)")

}
}
    for i in 0 ..< array.count
    {

 struct_array.append(myObject(date:date_array[i],advisory:array[i],
 status:"N",srno:srno_array[i]))
    }

    for i in 0 ..< array.count

    {
        msg_stat.append(oldMsg(is_checked: false))
    }

collection_view.reloadData()

}
catch{
print(error)
}


}

}

0 个答案:

没有答案