无法在 Tableview (ios 7) 上禁用多点触控

Posted

技术标签:

【中文标题】无法在 Tableview (ios 7) 上禁用多点触控【英文标题】:Cannot disable multi touch on Uitable View (ios7) 【发布时间】:2013-09-16 10:25:48 【问题描述】:

我有一个问题,我为UITableView 使用自定义单元格,当我在tableview 上点击多个手指(2 个手指或更多)时,每个单元格上的一些labels 有很多问题(到显示信息)丢失的文本(它是空的)。所以我尝试在我的桌子上禁用多点触控,但它不受影响。我尝试将tableView.allowsMultipleSelection = NO;tableView.multipleTouchEnabled = NO; 添加到cellForRowAtIndexPath or didSelectRowAtIndexPath 中。但没有任何工作。请帮我找出解决方案。

谢谢! 这是我的代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    int row = indexPath.row;

@synchronized (self) 
    if (row == [voicemailItems count]) 
        // User selected the blank rows
        [tableView deselectRowAtIndexPath:indexPath animated:YES];

        // Blank out the play button on previous selected row
        [self deselect];

        return;
    


if (selectedRowIndexPath != nil) 
    if (row == selectedRowIndexPath.row) 
        // Selecting the same row twice will play the voicemail
        if (streaming == NO) 
            if (calling == NO) 
                // Play the voicemail
                [NSTimer scheduledTimerWithTimeInterval:0.1f target:self selector:@selector(playVoicemailAction:) userInfo:indexPath repeats:NO];
            

            return;
        
        else 
            // Streaming VM
            if ([self isCallInProgress] == YES) 
                [ScreenUtils errorAllert:@"Cannot play voicemail while call is in progress." type:kUINotice delegate:self];
            
            else 
                if (![self isVoicemailNotification:selectedRowIndexPath.row]) 
                    // Stream the voicemail
                    [NSTimer scheduledTimerWithTimeInterval:0.1f target:self selector:@selector(playVoicemailAction:) userInfo:indexPath repeats:NO];
                
            
        
    
    else 
        // Selecting a different row
        [self shutdownPlayer];
        [self cancel];

        // Blank out the play button on previous selected row
        [self deselect];
    


selectedRowIndexPath = indexPath;

// Enable Call Back button 
// Don't enable if private, etc.
btnCallBack.enabled = ([self canCallBack:row] &&
                       !calling &&
                       ([self isCallInProgress] == NO) &&
                       ![self isVoicemailNotification:selectedRowIndexPath.row]);

// Enable and Delete button
btnDelete.enabled = YES;

// Select the cell
VoicemailCell * cell = (VoicemailCell*)[tblView cellForRowAtIndexPath:indexPath];
[cell select:YES playing:[self isPlaying] stream:streaming];
[tblView setNeedsDisplay];

//[tableView deselectRowAtIndexPath:indexPath animated:YES];

【问题讨论】:

你能显示一些代码吗? 你应该努力解决原因而不是症状。 为什么要从委托方法中调用影响 tableView 的方法?它们应该在分配/初始化 tableview 时调用,并且只调用一次。 您的问题是多个单元格同时被选中? 可以把这两行放在viewdidload方法tableView.multipleTouchEnabled = NO;和 tableView.allowsMultipleSelection = NO;试试这样.. 【参考方案1】:

试试这个,对我有帮助!

cell.contentView.exclusiveTouch = YES;
cell.exclusiveTouch = YES;

【讨论】:

【参考方案2】:

@试试这个

[cell setExclusiveTouch:YES]

【讨论】:

我为我的表格视图使用自定义单元格,当我点击单元格时,它会捕获此操作,然后通过更改标签的文本颜色来响应,显示按钮(我在自定义文件中执行此操作)...但是当我用不止一根手指在表格视图上快速触摸,我认为它不能像触摸动作那样快速变化。所以它的工作是错误的,我想我必须让第一个水龙头有足够的时间完成它的工作,然后再做第二个水龙头的动作。那么怎么做呢?希望你能明白我的意思。谢谢。 [cell setExclusiveTouch:YES] 在您的单元格上一次禁用多重触摸,您尝试过吗?? 是的!我把它放在 cellForRowAtIndexPath 但它不起作用。【参考方案3】:

经过多次尝试,我发现我需要在didSelectRowAtIndexPath的末尾添加以下代码:

[tableView deselectRowAtIndexPath:indexPath animated:YES];

【讨论】:

以上是关于无法在 Tableview (ios 7) 上禁用多点触控的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7.0 UITableView backgroundView 中的控件禁用了用户交互

tableView.contentInset 在 iOS 7 上损坏

在ios中调用另一个UIVIew后如何在tableview中禁用UIButton

设置 UIButton alpha 在 iOS 7 上无法正常工作。

在 ios 7 上显示空文本时显示 UISearchDisplayController searchResults TableView

ios:在点击collectionview单元格或tableview单元格时禁用第二个触摸事件