Подкласс UITableView indexPath nil

Я пытаюсь создать подкласс 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;
}

Затем у меня есть следующий метод, когда активируется долгое нажатие:

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


        }
    }
}

В моем viewController в viewDidLoad у меня есть:

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?


person MScottWaller    schedule 10.03.2015    source источник
comment
То, что вы делаете, не имеет смысла. Почему TouchTableView расширяет UITableView, если это не табличное представление. Это контроллер должен использовать табличное представление. Но тогда ваш контроллер представления, похоже, имеет собственное табличное представление и устанавливает делегат этого табличного представления и источник данных для вашего экземпляра TouchTableView. Итак, теперь у вас есть два табличных представления, оба с одним и тем же источником данных и делегатом.   -  person rmaddy    schedule 10.03.2015


Ответы (1)


Извините за беспорядок все. Рамди был прав. Нелепый. Решение:

в моем 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];

Теперь я получаю индексный путь.

person MScottWaller    schedule 10.03.2015