#iphone #objective-c #uitableview #edit
#iPhone #objective-c #uitableview #Редактировать
Вопрос:
В моем приложении мне нужна кнопка редактирования для моего tableview, которая может удалять строку или изменять ее положение. это действительно просто, когда я использую панель навигации по умолчанию, но теперь в моем случае я использую пользовательскую панель, которая заражает imageview, и теперь мне нужна кнопка, которая может редактировать tableview. я не использую панель навигации по умолчанию.
итак, пожалуйста, помогите мне
Комментарии:
1. Если дополнительный код, который я добавил, не помогает, можете ли вы опубликовать то, с чем вы работаете? Спасибо
Ответ №1:
Вам просто нужно установить editing
свойство UITableView, в вашем UITableViewController реализовать что-то вроде;
- (void) editingButtonPressed:(id)sender {
if([self isEditing]) {
[sender setText:@"Edit" forState:UIControlStateNormal];
[self setEditing:NO animated:YES];
} else {
[sender setText:@"Done" forState:UIControlStateNormal];
[self setEditing:YES animated:YES];
}
}
И подключите это к вашей кнопке или изображению и замените setText
на setImage
, если у вас нет текста.
Вот мой init
метод для UITableViewController
использования пользовательского UIToolbar
, который добавляет две кнопки на панель навигации вместо правой кнопки панели навигации.
- (id) init {
[super initWithStyle:UITableViewStyleGrouped];
UIBarButtonItem *email = [[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Email.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(composeEmail:)] autorelease];
UIBarButtonItem *bookmark = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addBookmark:)] autorelease];
[bookmark setStyle:UIBarButtonItemStyleBordered];
CustomToolbar *buttonToolbar = [[CustomToolbar alloc] initWithFrame:CGRectMake(0, 0, 93, 45)];
[buttonToolbar setBarStyle:UIBarStyleBlackTranslucent];
[buttonToolbar setItems:[NSArray arrayWithObjects:email, bookmark, nil] animated:NO];
[[self navigationItem] setTitle:@"Table with Custom Toolbar"];
[[self navigationItem] setRightBarButtonItem:[[[UIBarButtonItem alloc] initWithCustomView:buttonToolbar] autorelease]];
[buttonToolbar release];
return self;
}
При создании кнопок я использую action:@selector(customMethodName)
при создании кнопок для подключения моих методов к действиям с кнопками в данном случае, composeEmail
и addBookmark
которые загружают новые представления для этих задач.
Комментарии:
1. если вы не возражаете, не хотели бы вы сказать мне, какое значение получает sender?
2. @Mashhadi Отправителем является объект, вызывающий метод, которым может быть ваша кнопка или изображение, реагирующие на событие touchUpInside. Расширяется ли ваша пользовательская панель
UIToolbar
? Я добавил некоторый код, чтобы показать, как я добавил пользовательскую панель инструментов в свой UITableViewController.
Ответ №2:
вы можете добавить кнопку в свой imageview и, нажав на эту кнопку, установить для вашего tableviewediting значение yes.
вот код, как добавить imageview и кнопку:-
UIImageView *imageView2=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
[imageView2 setImage:[UIImage imageNamed:@"bottom bar_gda.png"]];
[self.view addSubview:imageView2];
[self.view bringSubviewToFront:imageView2];
UIButton *deleteButton = [UIButton buttonWithType:UIButtonTypeCustom];
[deleteButton setFrame:CGRectMake(280, 3, 26, 36)];
deleteButton.contentMode = UIViewContentModeScaleAspectFill;
UIImage *newImage12 = [UIImage imageNamed:@"check.png"];
[deleteButton setBackgroundImage:newImage12 forState:UIControlStateNormal];
[deleteButton setBackgroundImage:newImage12 forState:UIControlStateHighlighted];
[deleteButton addTarget:self action:@selector(editmethod:) forControlEvents:UIControlEventTouchUpInside];
[imageView2 addSubview:deleteButton];
Ответ №3:
Вы должны добавить экземпляр UIButton к этому imageview и реализовать метод, который будет выполняться при возникновении события в этом UIButton.
Код для метода будет выглядеть следующим образом,
if(tableView.editing)
[tableView setEditing:NO animated:YES]
else
[tableView setEditing:YES animated:YES]
Прочитайте документацию UITableView для получения дополнительной информации.
Ответ №4:
ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ САЛФЕТКИ ДЛЯ УДАЛЕНИЯ ФУНКЦИИ. ЭТО МОЖНО СДЕЛАТЬ СЛЕДУЮЩИМ ОБРАЗОМ.
вам необходимо реализовать следующие 3 метода делегирования TableView.
tableView:commitEditingStyle:forRowAtIndexPath:
tableView:canEditRowAtIndexPath:
tableView:editingStyleForRowAtIndexPath:
В методе
tableView:editingStyleForRowAtIndexPath:
ВОЗВРАЩАЕМЫЙ ТИП ДОЛЖЕН БЫТЬ
UITableViewCellEditingStyleDelete.