Pregunta iPhone, gancho para botón de edición / hecho, haga clic en la vista de tabla


En mi controlador de vista de tabla hay

self.navigationItem.leftBarButtonItem = self.editButtonItem;

que produce un botón regular de edición / hecho en la esquina superior izquierda. Por lo tanto, una vez que el usuario hace clic en "Editar", el título del botón cambia a "Listo" y las entradas de la tabla pueden eliminarse o reordenarse. Me gustaría recibir una notificación una vez que el usuario realmente haga clic en "Hecho". ¿Hay un gancho para eso?

Antecedentes: me gustaría insistir en el orden de las entradas, es decir, la próxima vez que el usuario muestre esta vista, me gustaría presentar las entradas en el orden utilizado menos recientemente.


24
2017-07-01 19:59


origen


Respuestas:


para aquellos que todavía están interesados ​​en esta pregunta (o respuesta: P)

API UITableView

reveló que hay un - (void)setEditing:(BOOL)editing animated:(BOOL)animate método Se llama a este método cada vez que se presiona este botón de edición / finalización. simplemente tiene que verificar por (BOOL)editing parámetro que se utilizó. Por último, pero no menos importante, debe llamar al método correcto desde el botón de edición / finalización original.

simplemente agregue este método a su clase uitableview

- (void)setEditing:(BOOL)editing animated:(BOOL)animate
{
    [super setEditing:editing animated:animate];
    if(editing)
    {
        NSLog(@"editMode on");
    }
    else
    {
        NSLog(@"Done leave editmode");
    }
}

43
2018-02-22 11:57



Para aquellos que no quieren anular UITableView (por ejemplo, si está utilizando UITableViewController), aquí hay una solución simple y limpia que yo uso. Básicamente, implica crear tu propio elemento de botón de edición y usar tableView's editing bandera para seguir la edición vs hecho. Para la guinda del pastel, muestra un botón "+" (en lugar de "Editar") cuando la tabla está vacía para agregar nuevos elementos.

- (void) updateEditButtonVisibility
{
    // tableItems represents the data structure that s
    if ([tableItems count] > 0)
    {
        UIBarButtonSystemItem editButtonType = self.tableView.editing ? UIBarButtonSystemItemDone : UIBarButtonSystemItemEdit;
        UIBarButtonItem *editButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:editButtonType
                                                                                        target:self
                                                                                        action:@selector(editButtonTouched)];

        self.navigationItem.rightBarButtonItem = editButtonItem;
        [editButtonItem release];
    }
    else
    {
        UIBarButtonItem *addButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
                                                                                       target:self
                                                                                       action:@selector(addButtonTouched)];
        self.navigationItem.rightBarButtonItem = addButtonItem;
        [addButtonItem release];
    }
}

- (void) editButtonTouched
{
    // edit/done button has been touched

    [self.tableView setEditing:!self.tableView.editing animated:YES];
    [self updateEditButtonVisibility];
}

- (void) addButtonTouched
{
    // logic to allow user to add new items goes here
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [self updateEditButtonVisibility];
}

3
2018-01-09 02:51



Esta es la forma estándar de recibir notificaciones cuando se presiona un botón de barra:

self.editButtonItem.target = self;
self.editButtonItem.action = @selector(buttonPushed:);

...

- (void) buttonPushed:(id)sender
{
// do stuff here
}

2
2017-07-01 20:14



Es posible cambiar la acción. Después de hacer clic en el botón Editar, muestra el botón Eliminar, en su lugar, es posible mostrar los botones rechazar / verificar / modificar. Y cambie la acción correspondiente en lugar de la opción de eliminar

Gracias Mindus


0
2017-07-13 11:01