Cómo implementar deshacer / rehacer en UIWebView

Estoy desarrollando una aplicación que tiene una function de editor de text enriquecido. En la parte superior de ZSSRichTextEditor he escrito mi código de editor. Aquí, mi editor es UIWebView, que se inyectará mediante código javascript para admitir / editar el contenido de text enriquecido.

ZSSRichTextEditor tiene function deshacer / rehacer, pero no cumple con mis requisitos. Así que empecé a implementar la característica de deshacer / rehacer por count propia.

Después de pasar por UndoManager , llegué a saber que implementar deshacer / rehacer no será un gran dolor de cabeza ya que Apple nos ayuda mucho. Si lo registramos en el lugar correcto, UndoManager se encargará de todo lo demás. Pero aquí estoy luchando cómo / dónde registrar UndoManger para UIWebView editable.

Hay tantos ejemplos para implementar deshacer / rehacer en UITextView pero no encuentro nada para UIWebView editable

¿Puede alguien guiarme por esto?

Primero, crea dos properties para el historial así:

 @property (nonatomic, strong) NSMutableArray *history; @property (nonatomic) NSInteger currentIndex; 

Entonces, lo que haría sería utilizar la subclass ZSSRichTextEditor para que pueda get llamadas de delegado cuando se presiona una tecla o se realiza una acción. Luego, en cada llamada de delegado, puede usar:

 - (void)delegateMethod { //get the current html NSString *html = [self.editor getHTML]; //we've added to the history self.currentIndex++; //add the html to the history [self.history insertObject:html atIndex:currentIndex]; //remove any of the networkingos because we've created a new branch from our history self.history = [NSMutableArray arrayWithArray:[self.history subarrayWithRange:NSMakeRange(0, self.currentIndex + 1)]]; } - (void)networkingo { //can't networkingo if there are no newer operations if (self.currentIndex >= self.history.count) return; //move forward one self.currentIndex++; [self.editor setHTML:[self.history objectAtIndex:self.currentIndex]]; } - (void)undo { //can't undo if at the beginning of history if (self.currentIndex <= 0) return; //go back one self.currentIndex--; [self.editor setHTML:[self.history objectAtIndex:self.currentIndex]]; } 

También utilizaría algún tipo de método FIFO (primero en primer lugar) para mantener el tamaño del historial más pequeño que 20 o 30, de modo que no tengas estas strings largas y locas en la memory. Pero eso depende de usted dependiendo de cuánto time el contenido esté en el editor. Espero que todo esto tenga sentido.