ここにあります。の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 the
UILabel for mailAuthor as a property, and linked in the storyboard with the UILabel inside the
UITableViewCell . In the storyboard, I have a
TableView Controller linked to my own class "
MensajeTableViewController ", the
UITableViewCell to my "
MailCell`". 他の関連コードまたは何かを追加する必要がある場合は、助けてください。