37

1 つのテーブル ビュー ベースのアプリケーションを作成しています。2 つのラベル、1 つの画像、1 つのボタンを含むテーブルのカスタム テーブル セルを作成しました。テーブル ビュー データ ソース メソッドは正しく機能しています。カスタム セルとビュー コントローラー クラスの両方に xib を使用しており、デリゲートとデータ ソースをファイルの所有者に接続しています。しかし、問題は、テーブルの行を選択すると、didSelectRowAtIndexPath が起動しないことです。前述のように、発砲する唯一の方法は、セルを約 3 ~ 4 秒間押し続けることです。なぜこれが起こっているのか誰にも分かりますか?

ご指摘ありがとうございます...

これが私のテーブルビューメソッドです..

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [finalAddonsArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    NewCustomCell *cell = (NewCustomCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        NSArray *nib=[[NSBundle mainBundle]loadNibNamed:@"NewCustomCell" owner:self options:nil];
        cell=[nib objectAtIndex:0];
    }

    Addons *addons1=[[Addons alloc]init];
    addons1= [finalAddonsArray objectAtIndex:indexPath.row];

    if (addons1.data == nil) {
        cell.ivCategory.image = [UIImage imageNamed:@"blogo.jpg"];
    }
    else
    {
        cell.ivCategory.image=[UIImage imageWithData:addons1.data];
    }

    cell.lblTitle.text = addons1.name;
    if (addons1.price == nil) {
        cell.lblPrice.text = nil;
    }
    else{
        cell.lblPrice.text = [NSString stringWithFormat:@"%@ rs",addons1.price];
    }
    [cell.button addTarget:self
                    action:@selector(editButtonPressed:)
          forControlEvents:UIControlEventTouchUpInside];

    cell.button.tag=indexPath.row;
    index = indexPath;
    cell.selectionStyle = UITableViewCellSelectionStyleGray;

    return cell;
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"sjcjksbcjksbcfkebscf1234567890");
}

もう1つ、カスタムセルの代わりにデフォルトのUITableViewCellを使用している場合、問題も同じで、デリゲートメソッドが起動しないことがわかります。

カスタム セル プロパティ:

ここに画像の説明を入力 ここに画像の説明を入力

4

7 に答える 7

2

他の人が示唆したように[tap setCancelsTouchesInView:NO];、トリックを行います。ただし、次のことを明確にしたいと思います。

タップジェスチャを実装していないと思われ、保護されたビューにビューを追加する必要があった理由に興味がある場合は、クラスをチェックしてください。ほとんどの場合、いくつかのクラスを継承しており、そのクラスにはタップ ジェスチャ認識エンジンが含まれているためです。

私の場合、次のことを行いました。

- (NSMutableArray *)tapProtectedViews
{
    NSMutableArray *views = [super tapProtectedViews];
    [views addObject:self.mTableView];
    return views;
}

Swift 4+ 用に編集

tapGesture という名前の UITapGestureRecognizer インスタンスがあるとします。

func disableTapGesture(){
    tapGesture.cancelsTouchesInView = false
}

または、次のことができます。

if self.view.gestureRecognizers?.isEmpty == false{
    for recognizer in self.view.gestureRecognizers!{
        self.view.removeGestureRecognizer(recognizer)
    }
 }
于 2018-12-20T11:25:54.103 に答える
0

親愛なる私は同じ問題に直面しました。セルをタップしたがselectrowatindexpathが呼び出されなかったとき、ボタンを数秒間押した後にボタンを離したときに突然呼び出されました。

同じ問題に直面している場合は、1. 問題を引き起こしている UITapGestureRecognizer または 2. テーブル ビューを配置したスクロール ビューが存在する必要があります。

したがって、テーブルビューが配置されているジェスチャまたはスーパースクロールビューを削除する必要があります

于 2015-11-18T11:01:14.580 に答える
0

ビューにカスタム ジェスチャ オブジェクトがある場合は、override func gestureRecognizerShouldBegin(_ gesture: UIGestureRecognizer) -> Boolデリゲートをオンにします。カスタム ジェスチャと送信者ジェスチャを比較します。カスタム ジェスチャ オブジェクトでない場合は、スーパーに渡します。そのため、システム ジェスチャ/タップはブロックされません。

于 2017-05-24T08:48:32.493 に答える