0

複数のラベルを含むカスタムセルを含むTableViewがあります。これらのラベルの1つにタップジェスチャを追加して、ポップアップが表示されるようにしました。問題は、ポップアップが本来あるべき場所(中央にあり、ラベルの上)に表示されないことです。

行の何が問題になっていますか:

[self.popupMenu showInView:self.view atPoint:CGPointMake(label.center.x, label.frame.origin.y)];

tableview.m:

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

    // add a tap gesture recognizer
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelTap:)];
    [cell.customAmountLabel addGestureRecognizer:tapGesture];

    NSString *ItemName = [NSString stringWithCString:CurrentOrder[indexPath.row].c_str() encoding:NSUTF8StringEncoding];
    NSString *ItemAmount = [NSString stringWithCString:CurrentOrder[indexPath.row].c_str() encoding:NSUTF8StringEncoding];

    cell.customNameLabel.text = ItemName;
    cell.customAmountLabel.text = ItemAmount;

    return cell;
}

タップジェスチャの方法:

- (void)labelTap:(UITapGestureRecognizer *)gestureRecognizer
{
    // get location of the swipe
    CGPoint location = [gestureRecognizer locationInView:self.tableCurrentOrder];

    // get the corresponding index path within the table view
    NSIndexPath *indexPath = [self.tableCurrentOrder indexPathForRowAtPoint:location];

    // check if index path is valid
    if(indexPath)
    {
        // get the cell out of the table view
        CustomCell *cell = (CustomCell *) [self.tableCurrentOrder cellForRowAtIndexPath:indexPath];

        // update the cell or model
        std::cout << CurrentOrder[indexPath.row] << std::endl;

        UILabel *label = (UILabel *)cell.customAmountLabel;

        [self.popupMenu showInView:self.view atPoint:CGPointMake(label.center.x, label.frame.origin.y)];
    }
}
4

1 に答える 1

1

セルがタップされたら、ビューをポップアップしますか? はいの場合-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)eventは、CustomCell クラスでメソッドを使用することをお勧めします。

eventメソッドの引数を使用して、タップがどこにあったかを知ることができます。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSSet *allTouches = [event allTouches]; 
    for (UITouch *touch in allTouches) 
    { 
        CGPoint location = [touch locationInView:touch.view];
        (...)
    }
}
于 2013-02-26T10:52:28.353 に答える