TTSearchTextFieldDelegate не вызывает textField: didSelectObject: - PullRequest
1 голос
/ 04 января 2012

У меня есть реализация TTSearchTextFieldDelegate в TTTableViewController.

Мой заголовок выглядит так:

#import <Three20/Three20.h>

@protocol SearchTestControllerDelegate;
@class MockDataSource;

@interface SearchTestController : TTTableViewController <TTSearchTextFieldDelegate> {
    id<SearchTestControllerDelegate> _delegate;
}

@property(nonatomic,assign) id<SearchTestControllerDelegate> delegate;

@end

@protocol SearchTestControllerDelegate <NSObject>

- (void)searchTestController:(SearchTestController*)controller didSelectObject:(id)object;

@end

Моя реализация выглядит так:

#import "SearchTestController.h"
#import "MockDataSource.h"

@implementation SearchTestController

@synthesize delegate = _delegate;

//////////////////////////////////////////////////////////////////////////////////
// NSObject

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
        _delegate = nil;

        self.title = @"Search Test";
        self.dataSource = [[[MockDataSource alloc] init] autorelease];

    }
    return self;
}

- (void)dealloc {
    [super dealloc];
}

//////////////////////////////////////////////////////////////////////////////////
// UIViewController

- (void)loadView {
    [super loadView];

    TTTableViewController* searchController = [[[TTTableViewController alloc] init] autorelease];
    searchController.dataSource = [[[MockSearchDataSource alloc] init] autorelease];
    self.searchViewController = searchController;
    self.tableView.tableHeaderView = _searchController.searchBar;

}

//////////////////////////////////////////////////////////////////////////////////
// TTTableViewController

- (void)didSelectObject:(id)object atIndexPath:(NSIndexPath*)indexPath {
    [_delegate searchTestController:self didSelectObject:object];
}

//////////////////////////////////////////////////////////////////////////////////
// TTSearchTextFieldDelegate

- (void)textField:(TTSearchTextField*)textField didSelectObject:(id)object {
    [_delegate searchTestController:self didSelectObject:object];
}

@end

Метод - (void)didSelectObject:(id)object atIndexPath:(NSIndexPath*)indexPath; вызывается и работает отлично. Это когда ячейка в TTTableView была выбрана.

Однако метод - (void)textField:(TTSearchTextField*)textField didSelectObject:(id)object никогда не вызывается. Этот метод следует вызывать, когда я выбираю ячейку в TTTableView после того, как что-то искал.

Что я делаю не так? Это в основном пример для TTCatalog отсюда: https://github.com/facebook/three20/tree/master/samples/TTCatalog

1 Ответ

0 голосов
/ 04 января 2012

Я решил свою проблему с помощью UITableViewDelegate и в -(void)loadView: я установил _searchController.searchResultsTableView.delegate = self;

Тогда осталось только реализовать этот метод:

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    TTTableImageItemCell *cell = (TTTableImageItemCell *) [tableView cellForRowAtIndexPath:indexPath];
    TTTableImageItem *object = [cell object];
    [_delegate searchTestController:self didSelectObject:object];
}
...