UITableView的子类indexPath nil

时间:2015-03-10 03:28:08

标签: ios objective-c uitableview nsindexpath

我试图继承UITableView。但是,我无法获得一个不为零的indexPath。 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

我附上了长篇大论:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    //bring in your custom cell here

    simpleTableIdentifier = @"SimpleTableCell";

    cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil) {
        {
            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SimpleTableCell" owner:self options:nil];
            cell = [nib objectAtIndex:0];

            [cell.textField setEnabled:NO];


            //put in long press
            UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
            [longPressGesture setMinimumPressDuration:1.0];

            [cell addGestureRecognizer:longPressGesture];

        }
    }
    return cell;
}

然后,当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?

1 个答案:

答案 0 :(得分:0)

对不起这一切都很抱歉。 rmaddy是对的。荒谬。解决方案:

在我的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];

现在我获得了索引路径。