2015-03-10 6 views
1

Я пытаюсь подклассифицировать UITableView. Тем не менее, я не могу получить indexPath, который не равен нулю. TableView имеет пользовательские ячейки.Подкласс UITableView indexPath nil

Вот мой 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 так:

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


     } 
    } 
} 

В моем представлении Controller in viewDidLoad у меня есть:

self.touchTableView = [[TouchTableView alloc] init]; 

[self.tableView setDelegate:self.touchTableView]; 
[self.tableView setDataSource:self.touchTableView]; 

self.touchTableView.myDelegate = self; 

Проблема в том, что indexPath всегда равен нулю. Вы заметите, что я называю себя, а не self.tableView, потому что self - это tableView. Есть ли способ получить indexPath?

+0

Что вы делаете, не имеет никакого смысла. Почему 'TouchTableView' расширяет' UITableView', когда это не табличный вид. Контроллер должен использовать представление таблицы. Но тогда ваш контроллер представления, похоже, имеет собственный табличный вид и устанавливает, что делегат табличного представления и источник данных представляют ваш экземпляр 'TouchTableView'. Итак, теперь у вас есть два вида таблиц, как с одним источником данных, так и с делегатом. – rmaddy

ответ

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

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

Смежные вопросы