Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UITableView indexPath nil的子类_Ios_Objective C_Uitableview_Nsindexpath - Fatal编程技术网

Ios UITableView indexPath nil的子类

Ios 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"

我正在尝试对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"



@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];