3

ここにあります。のtableview可変数の がありrowsます。それらのいずれかをタップすると、詳細ビ​​ューが表示されます。

0 から 9、11 から 19、21 から 29 などの行をタップした場合はすべて問題ありませんが、行番号10, 20, 30などでは機能しません...この行では長いタップでも検出されるため、alertが表示されます、必要に応じて行を削除するために(問題なく削除できます)、didselectrowatindexpath決して呼び出されません。

私は唯一のが同時にtableview維持する何かが関与していると思います。10 rowsしかし、cellForRowAtIndexすべての行で、すべてが正常にロードされます。NSMutableArrayで必要なデータにアクセスするために、すべてのデータを some に保持します[indexPath row]

私はすでに同様の投稿を探すのに時間を費やしていますが、このようなものは見つかりません.

どんな助けでも感謝します。ありがとう!

いくつかのコード:

//    in .h

#import <UIKit/UIKit.h>
#import "PullRefreshTableViewController.h"
#import "DetalleMailViewController.h"

@interface MensajesTableViewController : PullRefreshTableViewController <DetalleMailViewControllerDelegate>

@property (nonatomic, strong) NSMutableArray *mailAuthors;
@property (nonatomic) int row_tabla_delete;

- (IBAction)presentMenu:(id)sender;

@end

//in .m make the synthesize of mailAuthors and some relevant code:


- (void)viewDidLoad
{
    [super viewDidLoad];

    self.tableView.allowsSelection = YES;
    //This gesture works fine
    UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc]
                                      initWithTarget:self action:@selector(presentMenu:)];
    lpgr.minimumPressDuration = 0.5; //seconds
    lpgr.numberOfTouchesRequired =1;
    lpgr.delegate = self;
    [self.tableView addGestureRecognizer:lpgr];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
 static NSString *idCell = @"mailTableCell";
    MailCell *celda = [tableView dequeueReusableCellWithIdentifier:idCell];
    if(celda == nil){
        celda = [[MailCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:idCell];
    }

    celda.mailAuthor.text = [self.mailAuthors objectAtIndex:[indexPath row]];
    return celda;
}

-(void) viewWillAppear:(BOOL)animated{
    [[self tableView] reloadData];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    //I really use a segue here, but for the sake of simplicity, I just put a trace, never called for rows 10, 20, 30... The segue works fine the rest of the time...
    NSLog(@"tapped %d", [indexPath row]);
}

- (IBAction)presentMenu:(id)sender {

    if ([sender state] == UIGestureRecognizerStateBegan){
        CGPoint p = [sender locationInView:self.tableView];

        NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint:p];

        if (indexPath != nil){
            self.row_tabla_delete = [indexPath row];
        }

        //some code to delete the row

    }
}

In MailCell.h I have theUILabel for mailAuthor as a property, and linked in the storyboard with the UILabel inside theUITableViewCell . In the storyboard, I have aTableView Controller linked to my own class "MensajeTableViewController ", theUITableViewCell to my "MailCell`". 他の関連コードまたは何かを追加する必要がある場合は、助けてください。

4

0 に答える 0