     {
         let needsRemoveItemYArray = textInfo.0
         
+        print("needsRemoveItemYArray: \(needsRemoveItemYArray)")
+        
         for itemY in needsRemoveItemYArray {
             if let item = itemFromListItemContainerWithKeyY(itemY) {
-                item.prevItem?.nextItem = item.nextItem
-                item.clearGlyph()
-                item.listInfoStore!.clearBezierPath(self)
-                removeListItemFromContainer(item)
+                if String(Int(item.firstKeyY)) == itemY {
+                    item.prevItem?.nextItem = item.nextItem
+                    item.clearGlyph()
+                    item.listInfoStore!.clearBezierPath(self)
+                    removeListItemFromContainer(item)
+                } else {
+                    let lineHeight = self.font!.lineHeight
+                    
+                    CKTextUtil.resetKeyYSetItem(item, startY: item.firstKeyY, textHeight: CGFloat(item.keyYSet.count - 1) * lineHeight, lineHeight: lineHeight)
+                    listItemContainerMap.removeValueForKey(itemY)
+                }
             }
         }
         

                    // Do not delete prev '\n' char when first item deleting. And set cursorType to Text.
                    currentCursorType = ListType.Text
                    
                    if !willChangeTextMulti {
                        return false
                    }
                } else {

        else if CKTextUtil.isBackspace(text)
        {
            willBackspaceTouch = true
            isContinue = handleBackspaceEvent(textView, replacementText: text)
            
            if range.location == 0 && range.length == 0 {
                isContinue = false
