Ios UITableView indexPath nil的子类
我正在尝试对UITableView进行子类化。然而,我无法得到一个不是零的indexath。tableView具有自定义单元格 这是我的TouchTableView.hIos UITableView indexPath nil的子类,ios,objective-c,uitableview,nsindexpath,Ios,Objective C,Uitableview,Nsindexpath,我正在尝试对UITableView进行子类化。然而,我无法得到一个不是零的indexath。tableView具有自定义单元格 这是我的TouchTableView.h #import <UIKit/UIKit.h> #import <AVFoundation/AVFoundation.h> //I brought this in because I'm saving audio files in my app #import "SimpleTableCell.h"
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h> //I brought this in because I'm saving audio files in my app
#import "SimpleTableCell.h"
@protocol myTableViewDelegate;
@interface TouchTableView : UITableView <UITableViewDelegate, UITableViewDataSource, AVAudioRecorderDelegate, AVAudioPlayerDelegate, UITextViewDelegate, UITextFieldDelegate, UIAlertViewDelegate>
@property (nonatomic, weak) id<myTableViewDelegate> myDelegate;
@property (strong, nonatomic) NSMutableArray *sortedFiles;
@property (strong, nonatomic) NSString *simpleTableIdentifier;
@property (strong, nonatomic) SimpleTableCell *cell;
@property BOOL inverted;
-(void)refreshTable;
@end
@protocol myTableViewDelegate <NSObject>
- (void)selectedFile:(TouchTableView *)tableView withURL: (NSURL *) tableViewURL IndexPath:(NSIndexPath *)indexPath;
-(void)didDelete:(TouchTableView *)tableView IndexPath:(NSIndexPath *)indexPath;
-(void)setSortedFile:(TouchTableView *)tableView;
@end
然后我有以下方法来确定longpress何时激活:
- (void)longPress:(UILongPressGestureRecognizer *)gesture
{
if (![cell.textField isEnabled]) {
// only when gesture was recognized, not when ended
if (gesture.state == UIGestureRecognizerStateBegan)
{
// get affected cell
cell = (SimpleTableCell *)[gesture view];
// get indexPath of cell
NSIndexPath *indexPath = [self indexPathForCell:cell];
[self selectRowAtIndexPath:indexPath animated:NO scrollPosition:0];
[cell.textField setEnabled:YES];
[cell.textField becomeFirstResponder];
}
}
}
在viewDidLoad中的我的viewController中,我有:
self.touchTableView = [[TouchTableView alloc] init];
[self.tableView setDelegate:self.touchTableView];
[self.tableView setDataSource:self.touchTableView];
self.touchTableView.myDelegate = self;
问题是indexPath总是为零。您会注意到,我调用self而不是self.tableView,因为self是tableView。有没有办法得到indexPath?很抱歉弄得一团糟。马迪是对的。荒唐的解决方案: 在我的ViewController.h中,我设置:
@property (weak, nonatomic) IBOutlet TouchTableView *tableView;
然后我将示例中的最后一个代码更改为
[self.tableView setDelegate:self.tableView];
[self.tableView setDataSource:self.tableView];
self.tableView.myDelegate = self;
[self.tableView refreshTable];
现在我得到了索引路径。您所做的一切毫无意义。为什么TouchTableView在不是表视图时扩展UITableView。控制器应该使用表视图。但是,视图控制器似乎有自己的表视图,并将该表视图的委托和数据源设置为TouchTableView实例。现在您有了两个表视图,它们都具有相同的数据源和委托。
[self.tableView setDelegate:self.tableView];
[self.tableView setDataSource:self.tableView];
self.tableView.myDelegate = self;
[self.tableView refreshTable];