В моем приложении мне нужно удалить несколько строк в таблице, отредактировать таблицу и установить флажок рядом с таблицей. Когда флажок установлен, ячейки таблицы удаляются. Это похоже на приложение для iPhone. Как я могу это сделать, пожалуйста, помогите мне.
Редактирование и удаление нескольких строк в UITableView одновременно
Ответ 1
Если я правильно понял ваш вопрос, вы по существу хотите пометить UITableViewCell
каким-то образом (галочка); затем, когда пользователь удаляет главную кнопку "Удалить" , все отмеченные UITableViewCell
удаляются из UITableView
вместе с соответствующими объектами источника данных.
Чтобы реализовать флажок, вы можете переключиться между UITableViewCellAccessoryCheckmark
и UITableViewCellAccessoryNone
для свойства UITableViewCell
accessory
. Обратите внимание на следующий метод делегата UITableViewController
:
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *c = [tableView cellForRowAtIndexPath:indexPath];
if (c.accessoryType == UITableViewCellAccessoryCheckmark) {
[c setAccessoryType:UITableViewCellAccessoryNone];
}
//else do the opposite
}
Вы также можете посмотреть это сообщение относительно пользовательского UITableViewCell
, если вам нужна более сложная галочка.
Вы можете настроить главную кнопку "Удалить" двумя способами:
В любом случае, в конце концов, метод должен вызываться, когда нажата основная кнопка "Удалить" . Этот метод просто должен пройти через UITableViewCells
в UITableView
и определить, какие из них отмечены. Если отмечено, удалите их. Предполагая только один раздел:
NSMutableArray *cellIndicesToBeDeleted = [[NSMutableArray alloc] init];
for (int i = 0; i < [tableView numberOfRowsInSection:0]; i++) {
NSIndexPath *p = [NSIndexPath indexPathWithIndex:i];
if ([[tableView cellForRowAtIndexPath:p] accessoryType] ==
UITableViewCellAccessoryCheckmark) {
[cellIndicesToBeDeleted addObject:p];
/*
perform deletion on data source
object here with i as the index
for whatever array-like structure
you're using to house the data
objects behind your UITableViewCells
*/
}
}
[tableView deleteRowsAtIndexPaths:cellIndicesToBeDeleted
withRowAnimation:UITableViewRowAnimationLeft];
[cellIndicesToBeDeleted release];
Предполагая, что "редактировать" означает "удалить один UITableViewCell
" или "переместить один UITableViewCell
", вы можете реализовать следующие методы в UITableViewController
:
- (void)viewDidLoad {
[super viewDidLoad];
// This line gives you the Edit button that automatically comes with a UITableView
// You'll need to make sure you are showing the UINavigationBar for this button to appear
// Of course, you could use other buttons/@selectors to handle this too
self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
// Return NO if you do not want the specified item to be editable.
return YES;
}
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
//perform similar delete action as above but for one cell
}
}
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
//handle movement of UITableViewCells here
//UITableView cells don't just swap places; one moves directly to an index, others shift by 1 position.
}
Ответ 2
Вы можете поместить 1 UIButton, чтобы назвать его "EDIT" и подключить его к IBAction. В IBAction напишите так, чтобы вы могли выполнять свои требования.
-(IBAction)editTableForDeletingRow
{
[yourUITableViewNmae setEditing:editing animated:YES];
}
Это добавит круглые красные кнопки в левом углу, и вы можете щелкнуть по кнопке "Удалить", чтобы щелкнуть по ней, и строка будет удалена.
Вы можете реализовать метод делегата UITableView следующим образом.
-(UITableViewCellEditingStyle)tableView: (UITableView *)tableView editingStyleForRowAtIndexPath: (NSIndexPath *)indexPath
{
//Do needed stuff here. Like removing values from stored NSMutableArray or UITableView datasource
}
Надеюсь, что это поможет.
Ответ 3
вы хотите искать deleteRowsAtIndexPath
, при этом весь ваш код сжат между [yourTable beginUpdates]
и [yourTable endUpdates];
Ответ 4
Мне очень понравился Код здесь Используйте этот код для реализации определенных функций Ссылка на учебники