gpt4 book ai didi

ios - 按 editButtonItem 不会启用/禁用删除滑动

转载 作者:行者123 更新时间:2023-11-29 00:18:58 25 4
gpt4 key购买 nike

Using this tutorial ,我已经能够覆盖我的表格编辑以允许按下 editButtonItem 来切换“添加行”按钮。但是,我也希望它不允许滑动删除,除非打开编辑——但滑动删除始终处于启用状态。

我已经研究了具有相同问题的其他 Stack Overflow 问题,但似乎我已经实现了其他用户建议需要实现的所有内容。我一定是遗漏了什么。

以下是我的表格编辑代码:

- (void)viewDidLoad
{
[super viewDidLoad];

tableData = ptrBookmarks;

numberOfSections = 1; // for editing: initial number of sections

// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
self.navigationItem.rightBarButtonItem = self.editButtonItem;

//allow row selection during editing.
//if the "Add Row" row is selected we can trigger an insert.
//rather than forcing the using to click the (+) icon directly
self.aTableView.allowsSelectionDuringEditing = YES;
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.

if ([self isEditing]) // the current view is in editing mode, return count + an extra row
return [tableData count] + 1;
else // return count
return [tableData count];

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

if(cell == nil){
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}

//if number of rows is greater than the total number of rows in the data set
//and this view is in editing mode.
//Initialize the cell for "Add Row"
//there will be an extra row once SetEditing: is called
if(indexPath.row >= ptrBookmarks1.count && [self isEditing]){
cell.textLabel.text = @"Add Row";
}
else {
cell.textLabel.text = [tableData objectAtIndex:indexPath.row];
}

return cell;
}


//VIEW CONTROLLER METHOD: IMPORTANT
//this is a method of the view controller
//if we use apple's editing button as follows:
//self.navigationItem.rightBarButtonItem = self.editButtonItem
//then this method will be called automatically for us.
//if we are using a button callback or similar method,
//then we need to call setEditing: manually on the view
-(void) setEditing:(BOOL)editing animated:(BOOL)animated{

//wrap our code in an if statement
//only run the code if we are not swipe deleting a row.
//if we were called due to a swipeDelete action, ignore it
if(isSwipeDeleting == NO){
//call parent
[super setEditing:editing animated:animated];


//if editing mode
if(editing){
//batch the table view changes so that everything happens at once
[self.aTableView beginUpdates];
//for each section, insert a row at the end of the table
for(int i = 0; i < numberOfSections; i++){
//create an index path for the new row
NSIndexPath *path = [NSIndexPath indexPathForRow:tableData.count inSection:i];
//insert the NSIndexPath to create a new row. NOTE: this method takes an array of paths
[self.aTableView insertRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationAutomatic];
}
//animate the changes now
[self.aTableView endUpdates];
}else{
//batch the table view changes so that everything happens at once
[self.aTableView beginUpdates];
//for each section, insert a row at the end of the table
for(int i = 0; i < numberOfSections; i++){
//create an index path for the new row
NSIndexPath *path = [NSIndexPath indexPathForRow:tableData.count inSection:i];
//insert the NSIndexPath to create a new row. NOTE: this method takes an array of paths
[self.aTableView deleteRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationAutomatic];
}
//animate the changes now
[self.aTableView endUpdates];
}
}
}


//DELEGATE METHOD:
//this method will be called for every row and allows us to set the
//editing syle icon(Delete,Insert)
-(UITableViewCellEditingStyle) tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{

// Detemine if it's in editing mode
//if (self.aTableView.editing) {
//use the + icon(add icon) on row
//if this is the additional row created in setEditing:animated:
if(indexPath.row >= tableData.count){
return UITableViewCellEditingStyleInsert;
}
else{
//use the delete icon on this row
return UITableViewCellEditingStyleDelete;
}
//}
//else
//return UITableViewCellEditingStyleNone;
}

//handle the deletion insertion
//this method is called when the delete or insert icon has been press.
//we should update our dataSource by inserting or removing the selected INDEX
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

if (editingStyle == UITableViewCellEditingStyleDelete) {
//remove row from datasource
[tableData removeObjectAtIndex:indexPath.row];
//remove the row in the tableView because the deleteIcon was clicked
[self.aTableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}
else if (editingStyle == UITableViewCellEditingStyleInsert) {
//add a new row to the datasource
[tableData addObject:@"New Icon"];
//insert a row in the tableView because the plusIcon was clicked.
[self.aTableView insertRowsAtIndexPaths:@[indexPath]
withRowAnimation:UITableViewRowAnimationAutomatic];
}
}


//if we are in editing mode we do not want to perform Seque Transition
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
if ([identifier isEqualToString:@"MyDetailView"] && [self isEditing]) {
return NO;
}
return YES;
}


//this method is called when the user swipes to delete a row.
- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath{
isSwipeDeleting = YES;//user just swipe to delete a row
}
//when the user cancel the swipe or click the delete button
//this method is call
- (void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath{
isSwipeDeleting = NO;//swipe to delete ended. No longer showing the DELETE button in cell
}



// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {

NSString *item;

item = [[tableData objectAtIndex:fromIndexPath.row] retain];
[tableData removeObjectAtIndex:fromIndexPath.row];
[tableData insertObject:item atIndex:toIndexPath.row];

[item release];
}




// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
// Return NO if you do not want the item to be re-orderable.
return YES;
}

#pragma mark - Table view delegate

//DELEGATE METHOD:
//the user selected a row
//In order for the user to perform an INSERTION action on a row,
//they have to click the + icon icon. We can implement this method
//so that they can click anywhere on the add row to add a new row
//tableView.allowsSelectionDuringEditing = YES; must be set
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

//deselect the selected row with animatiion
[self.aTableView deselectRowAtIndexPath:indexPath animated:YES];

//if the selected row was the "Add Row" row call tableView:commitEditingStyle:
//to add a new row
if (indexPath.row >= tableData.count && [self isEditing]) {
[self tableView:tableView commitEditingStyle:UITableViewCellEditingStyleInsert forRowAtIndexPath:indexPath];
}
else { // otherwise do regular table item selection
[self.delegate didTapBookmarksTable:[tableData objectAtIndex:indexPath.row]];
}

}

最佳答案

发现问题。我将 editingStyleForRowAtIndexPath 方法中的主要 if 语句更改为 self.editing 而不是 self.aTableView.editing:

// Detemine if it's in editing mode
if (self.editing) {
//use the + icon(add icon) on row
//if this is the additional row created in setEditing:animated:
if(indexPath.row >= tableData.count){
return UITableViewCellEditingStyleInsert;
}
else {
//use the delete icon on this row
return UITableViewCellEditingStyleDelete;
}
}
else
return UITableViewCellEditingStyleNone;

关于ios - 按 editButtonItem 不会启用/禁用删除滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44529731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com