Pregunta sobre objective-c, clone, copy, uiviewcontroller, uiview – Clone o Copie UIViewController o UIView

12

Necesito copia, autocontrol o autoevaluación, he intentado:

UIView* viewOfSelf =[self.view copy];
UIViewController* controller = [self copy];

UIView* viewOfSelf =[self.view mutableCopy];
UIViewController* controller = [self mutableCopy];

El error es:

    -[UIViewController mutableCopyWithZone:]: unrecognized selector sent to instance 0xb803490
    -[UIView copyWithZone:]: unrecognized selector sent to instance 0x6e0acb0
cual es la clase deself ? MyViewController ? Creo que no hay una copia mutable deUIView yUIViewController Raptor

Tu respuesta

3   la respuesta
4

pero la solución de rishi tiene un problema: no se copiaNSLayoutConstraints. Por lo tanto, si alguna de sus vistas está utilizando la reproducción automática, no se copiarán. Estoy escribiendo una mini-lib para resolver eso y la publicaré en github cuando haya terminado. Desafortunadamente, no he encontrado una solución lista para usar en ningún lugar.

//Editar

Lo siento, lo que escribí anteriormente no fue del todo correcto. Hice un poco más de investigación y resulta que en defecto, elNSLayoutConstraints en la vista archivada NO se guardan. Pero, realmente puede especificar si desea archivar una restricción configurando sushouldBeArchived propiedad aYES. Entonces, incluso después de esta falsificacióncopy, conservas las restricciones correctas en la vista copiada.

30

Utilizar -

NSData *tempArchiveView = [NSKeyedArchiver archivedDataWithRootObject:self.view];
UIView *viewOfSelf = [NSKeyedUnarchiver unarchiveObjectWithData:tempArchiveView];

Similar -

NSData *tempArchiveViewController = [NSKeyedArchiver archivedDataWithRootObject:self];
UIViewController *controller = [NSKeyedUnarchiver unarchiveObjectWithData:tempArchiveViewController];
No consigue todo, como gestos personalizados, etc. jjxtra
Hmm no obtuvo mi UIImageView que tenía como una subvista de la vista que estaba clonando. Carl Hine
5

NSCopying protocolo queUIView clase niUIViewController clase no

Si quieres copiar una vista, estoy bastante seguro de que estás haciendo algo mal. La copia debe ser reemplazada por reutilizable.UIView como enUITableView utilizandodequeueReusableCellWithIdentifier: método.

Copiar el controlador de vista es definitivamente un anti-patrón. Si desea una copia exacta del controlador de vista que ya tiene, cree una nueva instancia con los mismos parámetros que el actual.

Aunque la respuesta de Rishi también funcionó para mí, pero crear nuevas instancias resultó ser una solución más confiable para mi problema. ¡Gracias! Myxtic

Preguntas relacionadas