2016-05-28 6 views
6

テーブルビューのセルを左にスワイプしてボタンを隠すようにスライドさせる方法があるのだろうかと思っていました。私はそれを正しく言う方法は本当にわからない、笑。しかし、下記のGIFをご覧ください。最初のGIFでは、キャンセルボタンが押された後にコードが表示されず、ボタンが表示されたままになります。スワイプでもっと多くのボタンを表示しているときにテーブルビューのセルをスワイプしたままにする

enter image description here

私は、セルのシフトをする場所にバックアップ表示されるようにそれを好むのに対し、私が持っていた唯一のアイデアは、このコードself.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)でセルをリロードすることでした。しかし、これはシフトアップボタンの外観を与えます右。下記のリロードGIFを参照してください。

enter image description here

どのように私はこれを正しくやるべき?ボタンを追加するコードとその機能については、以下を参照してください。

override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? { 

    let edit = UITableViewRowAction(style: UITableViewRowActionStyle.Normal, title: "Edit") { 
     (action, indexPath) in 

     if (indexPath == self.indexSelect) { 
      print("Editting Selected Cell") 
     } else { 
      print("Editting a difference cell than selected") 
     } 

     let section: Sections = self.frc.objectAtIndexPath(indexPath) as! Sections 
     let count: Int = self.sectionCount(section.section!) 
     var msg: String? 
     let sectionName: String = section.section! 

     if (count > 0) { 
      msg = "There are \(count) other Items using this Section currently. Editing the Section name \"\(sectionName)\" will affect them all. \n\nThis will be changed immediately!" 
     } 

     let alert = UIAlertController(title: "Edit Section Name", message: msg, preferredStyle: UIAlertControllerStyle.Alert) 
     let editAction = UIAlertAction(title: "Edit", style: UIAlertActionStyle.Destructive) { 
      UIAlertAction in 

      let sectionName = Util.trimSpaces(alert.textFields![0].text!) 

      if (sectionName != section.section) { 
       if (Util.checkSectionName(sectionName, moc: self.moc!) == false) { 
        let entityDesc = NSEntityDescription.entityForName("Sections", inManagedObjectContext: self.moc!) 
        let newSection: Sections = Sections(entity: entityDesc!, insertIntoManagedObjectContext: self.moc) 
        newSection.section = sectionName 

        do { 
         try self.moc!.save() 
        } catch { 
         fatalError("New item save failed") 
        } 

        let oldSection: Sections = section 

        let fetchReq = NSFetchRequest(entityName: "Catalog") 
        let pred = NSPredicate(format: "sections.section == %@", oldSection.section!) 
        fetchReq.predicate = pred 

        do { 
         let results = try self.moc!.executeFetchRequest(fetchReq) 
         for rec in results { 
          let catalog: Catalog = rec as! Catalog 
          catalog.sections = newSection 
         } 

         do { 
          try self.moc!.save() 
         } catch { 
          fatalError("Failed to Save after Delete") 
         } 
        } catch { 
         fatalError("Fetching Items to delete section failed") 
        } 

        self.moc!.deleteObject(oldSection) 

        do { 
         try self.moc!.save() 
        } catch { 
         fatalError("Failed to Save after Delete") 
        } 
       } else { 
        Util.msgAlert("Duplicate Section Name", msg: "\"\(sectionName)\" section name already exists.", curVC: self) 
        self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic) 
       } 
      } else { 
       self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic) 
      } 
     } 
     let cancel = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel) { 
      UIAlertAction in 

      //self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic) 
     } 

     alert.addAction(editAction) 
     alert.addAction(cancel) 
     alert.addTextFieldWithConfigurationHandler { 
      (txtFld) -> Void in 

      txtFld.text = section.section 
      txtFld.autocapitalizationType = UITextAutocapitalizationType.Words 
      txtFld.autocorrectionType = UITextAutocorrectionType.Default 
      txtFld.clearButtonMode = UITextFieldViewMode.WhileEditing 
     } 

     self.presentViewController(alert, animated: true, completion: nil) 
    } 

    edit.backgroundColor = UIColor.init(red: 84/255, green: 200/255, blue: 214/255, alpha: 1) 

    let delete = UITableViewRowAction(style: .Destructive, title: "Delete") { 
     (action, indexPath) in 

     let section: Sections = self.frc.objectAtIndexPath(indexPath) as! Sections 
     let count: Int = self.sectionCount(section.section!) 

     if (count > 0) { 
      let alert = UIAlertController(title: "Confirm Delete", message: "There are \(count) Items using this Section currently. Deleting this Section will reset them all to blank. \n\nThis can't be undone and will take affect immediately!", preferredStyle: UIAlertControllerStyle.Alert) 
      let cancel = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel) { UIAlertAction in } 
      let deleteAction = UIAlertAction(title: "Delete", style: UIAlertActionStyle.Destructive) { UIAlertAction in 
       var blankSection: Sections? 

       var fetchReq = NSFetchRequest(entityName: "Sections") 
       var pred = NSPredicate(format: "section == %@", "") 
       fetchReq.predicate = pred 

       do { 
        let results = try self.moc!.executeFetchRequest(fetchReq) 
        blankSection = (results.first as! Sections) 
       } catch { 
        fatalError("Fetching blank section failed") 
       } 

       fetchReq = NSFetchRequest(entityName: "Catalog") 
       pred = NSPredicate(format: "sections.section == %@", section.section!) 
       fetchReq.predicate = pred 

       do { 
        let group = try self.moc!.executeFetchRequest(fetchReq) 
        for rec in group { 
         let catalog: Catalog = rec as! Catalog 
         catalog.sections = blankSection 
        } 

       } catch { 
        fatalError("Fetching Items to delete section failed") 
       } 

       self.moc!.deleteObject(section) 

       do { 
        try self.moc!.save() 
       } catch { 
        fatalError("Failed to Save after Delete") 
       } 

       if (self.sectionUpdateProtocol != nil) { 
        self.sectionUpdateProtocol!.sectionUpdate(self, section: blankSection!) 
       } 

       //self.navigationController!.popViewControllerAnimated(true) 
      } 

      alert.addAction(deleteAction) 
      alert.addAction(cancel) 

      self.presentViewController(alert, animated: true, completion: nil) 
     } else { 
      self.moc!.deleteObject(section) 

      do { 
       try self.moc!.save() 
      } catch { 
       fatalError("Failed to Save after Delete") 
      } 
     } 

    } 

    return [delete, edit] 
} 
+0

の中に実装するか、彼らはそれを行う方法を確認するためにSWTableViewCellのいずれかを見てみましょう。 https://github.com/CEWendel/SWTableViewCell – sschale

答えて

6

だけ呼び出す:

tableView.setEditing(false, animated: true) 
+0

鼻の上で、それは私が望んだものです。ありがとうございました! –

+0

削除ボタンが消えるまでに時間がかかります。瞬時に消える方法はありますか?私はアラートを却下する完了ハンドラで上記のことを試みたこともありますが、それも機能しません。私もアニメーションをFALSEに設定しました。これも失敗しました –

+0

@zulkarnainshah私はこれが遅いと知っていますが、 'tableView.reloadData()'を試すことができます(アニメーションを設定する:false、 –

関連する問題