2012-01-04 12 views
1

我在TTTableViewController中實現了TTSearchTextFieldDelegateTTSearchTextFieldDelegate不調用textField:didSelectObject:

我的頭看起來是這樣的:

#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

回答

0

我通過實現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]; 
}