是否可以以编程方式在 UITableViewCell 上显示红色删除按钮?

Posted

技术标签:

【中文标题】是否可以以编程方式在 UITableViewCell 上显示红色删除按钮?【英文标题】:Is it possible to programmatically show the red delete button on a UITableViewCell? 【发布时间】:2011-03-14 16:53:54 【问题描述】:

这里有很多类似的问题,但我认为没有一个专门问这个问题,即代码中有没有办法强制红色删除按钮出现在 UITableView 行的右侧?

我问的原因是我正在尝试使用两个 UISwipeGestureRecognizers 来改变 tableview 的行为:

单指滑动调用自定义操作(而不是显示红色删除按钮,这就是它现在的行为方式),并且

双指滑动调用默认的单指滑动行为,即显示红色删除按钮。

我已经浏览了 SDK 文档,但我找不到任何方法可以导致该红色按钮出现,这让我认为如果不从头开始手动创建红色删除按钮和试图让它模仿内置的行为。

非常感谢任何帮助。

【问题讨论】:

对不起,如果我没有抓住重点,但这难道不是诀窍吗? [单元组编辑:YES 动画:YES]; 这是我尝试的第一件事。当您点击 UITableViewController 的editButtonItem 时,会发生同样的事情,即它会显示该单元格的编辑附件,在大多数情况下是蓝色的小细节披露指示器,而不是红色的删除按钮。由于不存在 UITableViewCellAccessoryDeleteButton 与并行 UITableViewCellAccessoryDetailDisclosureButton 这样的东西,因此在单元格上调用 setEditing: 并没有帮助。有一个[UITableCellView showingDeleteButton],但它是一个只读属性:( 您找到解决方案了吗?我有完全相同的问题(我的删除机制不是两指滑动,而是一个按钮)。 还没有 - 根据 ios 5 SDK 文档,UITableViewCell showingDeleteConfirmation 属性仍然是只读的,即使 UITableViewCellStateShowingDeleteConfirmationMask 已公开并且可以反应在状态转换回调中,我看不到手动触发这些状态转换的方法,这样红色的删除按钮就会出现。 我们可以尝试,在调用 setEditing:YES 动画:NO 之后,以编程方式点击红色按钮然后隐藏它吗?我希望删除按钮以这种方式出现。当然,我们必须防止或撤消由红色按钮出现引起的缩进。 【参考方案1】:

在 doubleFingerSwipe 手势的选择器方法中设置一个变量并指定为 no of row swipe 并重新加载表格。 在

- (UITableViewCellEditingStyle) tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath

    if(indexPath.row == yourVariable) return UITableViewCellEditingStyleDelete;
    else return UITableViewCellEditingStyleNone;

我认为这对你的问题有用。

【讨论】:

【参考方案2】:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    NSString *CellIdentifier = [NSString stringWithFormat:@"cell %d",indexPath.row];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        if(TableMethod==1)
        
            UIButton *delete_btn=[UIButton buttonWithType:UIButtonTypeCustom];
            [delete_btn setFrame:CGRectMake(10,15,25,25)];
            delete_btn.tag=indexPath.row;
            [delete_btn setImage:[UIImage imageNamed:@"remove_Icone.png"] forState:UIControlStateNormal];
            [delete_btn addTarget:self action:@selector(delete_btn:) forControlEvents:UIControlEventTouchUpInside];
            [cell addSubview:delete_btn];
        
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    

    // Configure the cell.
    return cell;



- (IBAction)delete_btn:(id)sender

    UIButton *buttontag = (UIButton *)sender;
    //NSLog(@"%d",buttontag.tag);
    Delete_row = buttontag.tag;

    UIAlertView *Alert = [[UIAlertView alloc]initWithTitle:@"Delete Reservation"   message:@"Are you sure to want Delete Reservation ??" delegate:self cancelButtonTitle:@"Delete" otherButtonTitles:@"Cancel",nil];
    Alert.tag=1;
    [Alert show];
    [Alert release];


-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 

    if(alertView.tag==1)
    
        if(buttonIndex == 0)
        
            // delete row
        
    

【讨论】:

您能了解一下 Tablemethod == 1 块中发生的情况吗?在我看来,您正在创建自定义按钮,但我不确定。 @Bhavesh 什么?我无法理解你的问题@Unome。 这不是问题,我很好奇您的代码的一些解释。 TableMethod 在哪里定义?它是表格视图上的属性吗?我在 swift 而不是客观 c 中做表格视图,所以我不知道它是否是特定于语言的。【参考方案3】:

这不是对您的问题的回答,而是关于功能的建议(我还不能离开 cmets,但我仍然想提供我的两分钱)。

从 UI/UX 的角度来看,覆盖默认或“预期”功能并不是一个好主意。用户对各种应用程序和功能的工作方式有一定的期望,当他们不以这种方式工作时,用户要么感到沮丧,要么感到困惑。因此,几乎每个涉及表格视图的应用程序中都出现了下拉刷新功能。更有意义的是让两指滑动成为自定义功能。你的应用程序不仅会符合传统的用户体验指南(事实上,我认为 Apple 可能会拒绝你的应用程序,这可能就是你很难找到答案的原因),而且会涉及很多更少的挣扎/自定义代码。

很抱歉,这不是您问题的直接答案,但我希望它有所帮助。

【讨论】:

我原则上同意,但我要说两件事:(1) 有大量用户不知道 iOS 上的滑动删除 UI 约定和 (2)可用性增益(就减少的手动工作而言)有可能完成以高频率执行的任务,以超过打破 UI 约定的“混淆损失”,尤其是。当该 UI 约定根据 (a) 未广为人知时。但是按照严格的原则,我同意你的观点:)【参考方案4】:

通过调用

[self.tableView setEditing:YES animated:YES];

在 UITableViewController 上,您可以将 tableView 设置为编辑模式。您实际上可以将手势识别器添加到单元格视图中,该单元格视图使用委托方法进行调用。

根据文档of UITableViewCell,您实际上可以以相同的方式设置单个单元格。除此之外,您还必须管理标准手势识别器。我想子类化将是你在这种情况下的盟友。

我希望这会有所帮助。

【讨论】:

不幸的是,setEditing: 在整个表上只是调用 setEditing: 在允许编辑的每个单元格上,并且根据我对 NWCoder 答案的评论,这不会显示删除按钮。无论如何感谢您的回复。 不管这是否是这个问题的正确答案,我相信这是最好的一般、全面的答案。简单的。精确的。总的来说非常有帮助。

以上是关于是否可以以编程方式在 UITableViewCell 上显示红色删除按钮?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 Dynamics CRM (2013/2016) 中以编程方式禁用审核?

是否可以在 android 中以编程方式创建和填充 AutoCompleteTextView?

是否可以在 android 中以编程方式创建 string.xml 文件?

是否可以在 iPhone Setting Bundle 中以编程方式添加 UISwitch?

是否可以仅在内存中以编程方式编译 java 源代码?

是否可以以编程方式在 UITableViewCell 上显示红色删除按钮?